Question

Je souhaite déclencher l'événement de soumission sous la forme de l'élément actuel. Une méthode que je connais qui fonctionne parfois est la suivante:

this.form.submit();

Je me demande s'il existe une meilleure solution, éventuellement avec jQuery, car je ne suis pas sûr à 100% que cette méthode fonctionne dans tous les navigateurs.

Modifier:

La situation que j'ai est la suivante:

<form method="get">
    <p><label>Field Label
        <select onchange="this.form.submit();">
            <option value="blah">Blah</option>
            ....
        </select></label>
    </p>
</form>

Je souhaite pouvoir soumettre le formulaire lors du changement de < sélectionner > .

Ce que je recherche, c’est une solution qui fonctionne sur n’importe quel champ de n'importe quel formulaire sans connaître l’identifiant ou le nom du formulaire. $ ('formulaire: premier') et $ ('formulaire') ne fonctionnera pas car le formulaire pourrait être le troisième de la page. De plus, jQuery est déjà utilisé sur le site. Utiliser un peu de jQuery n’est donc pas une grosse affaire.

Alors, y a-t-il moyen de faire en sorte que jQuery récupère le formulaire dans lequel se trouve l'entrée / select / textarea?

Était-ce utile?

La solution

Je pense que ce que vous recherchez ressemble à ceci:

$(field).closest("form").submit();

Par exemple, pour gérer l'événement onchange, vous devez avoir ceci:

$(select your fields here).change(function() {
    $(this).closest("form").submit();
});

Si, pour une raison quelconque, vous n'utilisez pas jQuery version 1.3 ou ultérieure, vous pouvez appeler parents au lieu de le plus proche .

Autres conseils

this.form.submit();

C’est probablement votre meilleur pari. Surtout si vous n’utilisez pas déjà jQuery dans votre projet, il n’est pas nécessaire de l’ajouter (ou de toute autre bibliothèque JS) à cette fin.

Vous pouvez toujours JQuery-ize votre formulaire.submit, mais vous pouvez simplement appeler le même chose:

$("form").submit(); // probably able to affect multiple forms (good or bad)

// or you can address it by ID
$("#yourFormId").submit();

Vous pouvez également attacher des fonctions à l'événement de soumission, mais il s'agit d'un concept différent.

Semblable à Matthew's réponse, je viens de constater que vous pouvez effectuer les opérations suivantes:

$(this).closest('form').submit();

Faux: le problème avec l'utilisation de la fonctionnalité parent est que le champ doit être immédiatement dans le formulaire pour fonctionner (pas dans les tds, les libellés, etc.).

Je suis corrigé: le parent s (avec un s) fonctionne également. Thxs Paolo pour l'avoir signalé.

J'ai constaté que l'utilisation de jQuery était la meilleure solution

.
$(this.form).submit()

À l'aide de cette déclaration, les plug-ins jquery (par exemple, le plug-in de formulaire jquery ) fonctionnent correctement et la surcharge de la traversée du DOM dans jquery est réduite .

Votre question est quelque peu déroutante en ce sens que vous n'expliquez pas ce que vous entendez par "élément actuel".

Si vous avez plusieurs formulaires sur une page avec toutes sortes d'éléments de saisie et un bouton de type "soumettre", cliquez sur "entrer". lorsqu’un de ces champs est rempli, la soumission de ce formulaire est déclenchée. Vous n'avez pas besoin de Javascript ici.

Mais si vous avez plusieurs "soumettre", boutons dans un formulaire et aucune autre entrée (par exemple, boutons "modifier une ligne" et / ou "supprimer une ligne" dans le tableau), la ligne que vous avez postée peut être le moyen de le faire.

Une autre solution (sans Javascript) pourrait consister à attribuer des valeurs différentes à tous vos boutons (qui sont de type "submit"). Comme ceci:

<form action="...">
    <input type="hidden" name="rowId" value="...">
    <button type="submit" name="myaction" value="edit">Edit</button>
    <button type="submit" name="myaction" value="delete">Delete</button>
</form>

Lorsque vous cliquez sur un bouton, seul le formulaire contenant le bouton est soumis et seule la valeur du bouton que vous avez cliqué est envoyée (avec les autres valeurs d'entrée).

Ensuite, il vous suffit de lire la valeur de la variable " myaction " sur le serveur. et décider quoi faire.

Dans JQuery, vous pouvez appeler

$("form:first").trigger("submit")

Je ne sais pas si c'est beaucoup mieux. Je pense que form.submit (); est assez universel.

<form method="get">
   <p><label>Field Label
      <select onchange="this.form.submit();">
         <option value="blah">Blah</option>
            ....
     </select>
     </label>
   </p>
    **<!-- <input name="submit" type="submit" /> // name="submit_new_name" -->**
  </form>

<!-- 

   this.form.submit == this.form.elements['submit'];

-->
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top