jQuery znajdź formularz nadrzędny


219

Mam ten HTML

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

Jak mogę wybrać formularz, którego input[name="submitButton"]jest częścią? (kiedy klikam przycisk Prześlij, chcę wybrać formularz i dołączyć do niego niektóre pola)

Odpowiedzi:


485

Sugerowałbym użycie closest, które wybiera najbliższy pasujący element nadrzędny:

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

Zamiast filtrować według nazwy, zrobiłbym to:

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

2
Może powinniśmy dodać get by index? „$ („ input [type = upload] ”). closest („ form ”); ' zwraca tablicę formularzy.
— sergzach

Próbuję użyć powyższego w ten sposób: $ (". Each img"). Click (function () {$ (this) .closest ("form"). Show ();}); Ale nie mogę sprawić, żeby zadziałało. : /
— Alisso

2
odpowiedź peterjwest jest lepsza niż ta.
— gagarine

W HTML5 istnieje nowy atrybut „form”, który pozwala mieć element poza formą nadrzędną. Należy to najpierw sprawdzić.
— mcintyre321

56

Możesz użyć odwołania do formularza, które istnieje na wszystkich wejściach, jest to znacznie szybsze niż .closest()(5-10 razy szybsze w Chrome i IE8). Działa również w IE6 i 7.

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

2
Wspominasz o IE8. Czy to działa również w wersjach 6, 7 i 9?
— Sonny

1
Jest to o wiele lepsze i szybsze, jak wspomniano @peterjwest. Re IE6 Myślę, że .form na elementach wejściowych był na IE4, niestety strona dewelopera netscape już nie ma ... i kto by sprawdził Mozillę.
— Maciej Łopaciński,

Jest to o wiele bezpieczniejszy sposób niż używanie, closest()ponieważ dane wejściowe mogą mieć własne przypisanie formularza: codepen.io/anon/pen/vNqEyg
— Möhre

Prawdopodobnie użyłeś skróconej notacji, aby skrócić swój kod, ale w tym przykładzie odwraca on uwagę od faktycznego kodu, który chcesz pokazać (szczególnie dla osób niezaznajomionych ze stenografią). Byłbym za regularnym użyciem if ().
— AeonOfTime,

Powiedziałbym, że w tym rozwiązaniu jest za dużo bałaganu. Jeśli pójdziesz z tym (moje rozwiązanie poniżej - tak, to jest reklama :)): stackoverflow.com/a/18921404/261332 , to nie potrzebujesz tego rodzaju komplikacji, ponieważ zadziała tylko wtedy, gdy powinno i nic innego nie rób.
— userfuser

17

Dla mnie wygląda to na najprostsze / najszybsze:

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

2
Dla mnie używanie $(this.form)jest najlepszym rozwiązaniem
— jap1968

2

Z przeglądarek HTML5 można korzystać inputElement.form- wartość atrybutu musi być identyfikatorem <form>elementu w tym samym dokumencie. Więcej informacji na temat MDN .


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.