2009-10-25 6 views
189

j'ai ce htmljQuery trouver formulaire parent

<ul> 
    <li><form action="#" name="formName"></li> 
    <li><input type="text" name="someName" /></li> 
    <li><input type="text" name="someOtherName" /></li> 
    <li><input type="submit" name="submitButton" value="send"></li> 
    <li></form></li> 
</ul> 

Comment puis-je choisir la forme que le input[name="submitButton"] fait partie? (quand je clique sur le bouton d'envoi que je veux sélectionner le formulaire et ajouter des champs à l'intérieur)

Répondre

437

Je suggère d'utiliser closest, qui sélectionne le plus proche élément parent correspondant:

$('input[name="submitButton"]').closest("form"); 

au lieu de filtrer le nom, je ferais ceci:

$('input[type=submit]').closest("form"); 
+0

Merci beaucoup! Je me débattais vraiment avec ça. –

+2

Peut-être devrions-nous ajouter get by index? '$ ("input [type = submit]"). closest ("formulaire");' retourne un tableau de formes. – sergzach

+0

J'essaie d'utiliser ce qui précède de cette façon: $ (". Chaque img"). Cliquez sur (function() { $ (this) .closest ("form"). Show(); }); Mais je n'arrive pas à le faire fonctionner. :/ – Alisso

52

Vous pouvez utiliser la référence de formulaire qui existe sur toutes les entrées, c'est beaucoup plus rapide que .closest() (5 à 10 fois plus rapide dans Chrome et IE8). Fonctionne sur IE6 & 7 aussi.

var input = $('input[type=submit]'); 
var form = input.length > 0 ? $(input[0].form) : $(); 
+2

Vous mentionnez IE8. Cela fonctionne-t-il également pour les versions 6, 7 et 9? – Sonny

+1

C'est beaucoup mieux et plus vite que @peterjwest mentionné. Re IE6 Je pense que .form sur les éléments d'entrée était sur IE4, malheureusement la page de développement de netscape est partie maintenant ... et qui vérifierait mozilla un. –

+0

Cette méthode est beaucoup plus sûre que d'utiliser 'nearest()' car une entrée peut avoir une affectation de formulaire propre: http://codepen.io/anon/pen/vNqEyg –

12

Pour moi, cela ressemble à la plus simple/rapide:

$('form input[type=submit]').click(function() { // attach the listener to your button 
    var yourWantedObjectIsHere = $(this.form); // use the native JS object with `this` 
}); 
+2

Pour moi, l'utilisation de '$ (this.form)' est la meilleure solution – jap1968