jQuery üst formu bul


219

bu html'im var

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

input[name="submitButton"]Parçası olduğu formu nasıl seçebilirim ? (Gönder düğmesini tıkladığımda formu seçmek ve içine bazı alanlar eklemek istiyorum)

Yanıtlar:


486

closestEn yakın eşleşen üst öğe seçer kullanarak kullanmanızı öneririm :

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

İsme göre filtreleme yerine, bunu yaparım:

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

2
Dizine göre almayı eklememiz gerekebilir mi? '$ ( "girişi [tipi = göndermek]") yakın ( "form").'' bir dizi form döndürür.
sergzach

Yukarıdaki şekilde bu şekilde kullanmaya çalışıyorum: $ (". Each img"). Click (function () {$ (this) .closest ("form"). Show ();}); Ama işe yaramaz gibi gözükmüyorum. : /
Alisso

2
peterjwest cevabı bundan daha iyidir.
gagarine

HTML5'te, öğeyi üst formun dışında tutmanıza izin veren yeni bir 'form' özniteliği vardır. Bu önce kontrol edilmelidir.
mcintyre321

56

Tüm girişlerde bulunan form referansını kullanabilirsiniz, bu çok daha hızlıdır .closest()(Chrome ve IE8'de 5-10 kat daha hızlı). IE6 ve 7 üzerinde de çalışır.

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

2
IE8'den bahsediyorsunuz. Bu sürüm 6, 7 ve 9 için de geçerli mi?
Sonny

1
@Peterjwest'in belirttiği gibi bu çok daha iyi ve daha hızlı. Re IE6 Bence giriş elemanları üzerindeki .form IE4 üzerinde, ne yazık ki netscape dev sayfa şimdi gitti ... ve kim mozilla birini kontrol ediyorum.
Maciej Łopaciński

closest()Bir girişin kendi form ataması olabileceğinden, bu kullanmak yerine çok daha güvenli bir yoldur : codepen.io/anon/pen/vNqEyg
Möhre

Kodunuzu kısa tutmak için gösterimi kısa stilde kullandınız, ancak bu örnekte yalnızca göstermek istediğiniz gerçek koddan (özellikle stenoyu bilmeyen kişiler için) dikkat dağıtır. Düzenli bir if () kullanmaktan yanayım.
AeonOfTime

Bu çözümle çok fazla karışıklık olduğunu söyleyebilirim. Bununla devam ederseniz (aşağıdaki çözümüm - evet bu bir reklamdır :)): stackoverflow.com/a/18921404/261332 , o zaman bu tür komplikasyonlara ihtiyacınız yoktur, çünkü sadece gerektiğinde çalışacaktır ve başka bir şey yapmayın.
userfuser

17

Bana göre, bu en basit / en hızlı gibi görünüyor:

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

2
Benim için kullanmak $(this.form)en iyi çözümdür
jap1968

2

HTML5 tarayıcılarından biri kullanılabilir inputElement.form- özniteliğin değeri <form>, aynı belgedeki bir öğenin kimliği olmalıdır . MDN hakkında daha fazla bilgi .


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.