2009-10-25 17 views
189

ich habe diesen HTMLjQuery finden Eltern Form

<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> 

Wie kann ich die Form wählen, dass der input[name="submitButton"] Teil ist? (wenn ich auf den Absenden-Button klicken Ich möchte das Formular aus, und einige Felder in anhängen)

Antwort

437

Ich schlage vor, closest verwenden würde, die das am besten passende Mutterelement wählt:

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

Statt Filter mit Namen, würde ich dies tun:

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

Vielen Dank! Ich habe wirklich damit gekämpft. –

+2

Kann es sein, dass wir eine Indexerweiterung hinzufügen sollten? '$ ("input [type = submit]"). am nächsten ("form");' gibt ein Array von Formularen zurück. – sergzach

+0

Ich versuche, das obige auf diese Weise zu verwenden: $ (". Jedes img"). Click (function() { $ (this) .close ("form"). Show(); }); Aber ich kann nicht scheinen, es zur Arbeit zu bringen. :/ – Alisso

52

Sie können die Formularreferenz verwenden, die an allen Eingängen vorhanden ist, das ist viel schneller als .closest() (5-10 mal schneller in Chrome und IE8). Funktioniert auch auf IE6 & 7.

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

Sie erwähnen IE8. Funktioniert das auch für die Versionen 6, 7 und 9? – Sonny

+1

Dies ist viel besser und schneller als @peterjwest erwähnt. Re IE6 Ich denke, .form auf Eingabeelementen war auf IE4, leider Netscape Dev Seite ist jetzt weg ... und wer mozilla eins überprüfen würde. –

+0

Dies ist eine viel sicherere Methode als '' engste() 'zu verwenden, da eine Eingabe eine eigene Formularzuweisung haben kann: http://codepen.io/anon/pen/vNqEyg –

12

Für mich sieht das wie die einfachste/schnellste:

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

Für mich ist '$ (this.form)' die beste Lösung – jap1968