Bir girdinin kapsayıcı formu nasıl elde edilir?


106

Sadece o GİRİŞ'e referansım olduğunda bir GİRİŞ'in FORM ebeveynine referans almam gerekiyor. Bu JavaScript ile mümkün mü? İsterseniz jQuery kullanın.

function doSomething(element) {
    //element is input object
    //how to get reference to form?
}

Bu çalışmıyor:

var form = $(element).parents('form:first');

alert($(form).attr("name"));

Yanıtlar:


185

Girdi olan yerel DOM öğeleri, formait oldukları forma işaret eden bir özelliğe de sahiptir :

var form = element.form;
alert($(form).attr('name'));

Göre W3Schools'da , .formbu tutması gerektiğini bu nedenle giriş alanlarının mülkiyeti, hatta daha tarayıcılar bu jQuery garanti olan IE 4.0+, Firefox 1.0+, Opera 9.0+, tarafından desteklenmektedir.

Bu farklı türde bir öğe olsaydı (bir değil <input>), en yakın ebeveyni şununla bulabilirsiniz closest:

var $form = $(element).closest('form');
alert($form.attr('name'));

Ayrıca bu MDN bağlantıya bakın formmülkiyet HTMLInputElement:


Pekala, bu işe yarıyor .. Form özelliği hakkında. Sadece denedim ve bu da işe yarıyor. Ama bu, söylediğin tarayıcılarda desteklenmiyor mu?
Ropstah

Eminim öyledir. % 100 emin değilim, bu yüzden hiçbir şey için söz vermek istemiyorum. Şu an araştırıyorum ...
Paolo Bergantino

5
Element.form kullanın - jQuery'nin yaptığından daha fazla tarayıcıda çalışacaktır. Aynı zamanda bir özellik referansıdır, bu nedenle DOM ağacında en yakın () ile yürümekten yaklaşık bin kat daha verimli olacaktır.
NickFitz

1
Katılıyorum. Dediğim gibi, başlangıçta form özelliğinin tüm yaygın tarayıcılarda kapsamlı bir şekilde uygulanıp uygulanmadığından emin değildim. Cevabımı, bunu daha iyi bir seçenek olarak daha açık bir şekilde listelemek için düzenledim ve eğer bu farklı bir öğe türü olsaydı, en yakını bir haber olarak bırakıyorum.
Paolo Bergantino

Select gibi diğer giriş türleriyle de çalışıyor gibi görünüyor. Bunu bildiğim iyi oldu.
Falk

42

Her girdinin, formgirdinin ait olduğu forma işaret eden bir özelliği vardır, bu yüzden basitçe:

function doSomething(element) {
  var form = element.form;
}

4

Biraz jQuery ve eski stil javascript kullanıyorum - daha az kod

$($(this)[0].form) 

Bu, öğeyi içeren forma tam bir referanstır


3
Temel olarak "bunu bir jQuery nesnesi yapın ve sonra onu bir jQuery nesnesi yapmayın" diyorsunuz.
isherwood

1
Tanrım, neden sadece yapmıyorsun $(this.form)?
Andre Figueiredo

3

JQuery kullanarak :

function doSomething(element) {
    var form = $(element).closest("form").get().
    //do something with the form.
}

2

JQuery kullanıyorsanız ve herhangi bir form öğesi için bir tutamaç varsa, .form'u kullanmadan önce öğeyi (0) almanız gerekir.

var my_form = $('input[name=first_name]').get(0).form;

2
function doSomething(element) {
  var form = element.form;
}

ve html'de, bu öğeyi bulmanız ve bu forma bağlanmak için "form" niteliğini eklemeniz gerekir, lütfen http://www.w3schools.com/tags/att_input_form.asp adresine bakın, ancak bu form attr değil IE'yi destekleyin , örneğin, form kimliğini doğrudan iletmeniz gerekir.


2

Onun element.attr('form')yerine kullanmam gerekiyordu element.form.

Fedora 12'de Firefox kullanıyorum.



0

Ve bir tane daha ...

var _e = $(e.target); // e being the event triggered
var element = _e.parent(); // the element the event was triggered on
console.log("_E " + element.context); // [object HTMLInputElement]
console.log("_E FORM " + element.context.form); // [object HTMLFormElement]
console.log("_E FORM " + element.context.form.id); // form id

0

Bu Javascript işlevi örneği, formu tanımlamak için bir olay dinleyicisi tarafından çağrılır

function submitUpdate(event) {
    trigger_field = document.getElementById(event.target.id);
    trigger_form = trigger_field.form;

-2

bu işe yarar mı? (eylemi boş bırakarak formu kendisine de geri gönderir, değil mi?)

<form action="">
<select name="memberid" onchange="this.form.submit();">
<option value="1">member 1</option>
<option value="2">member 2</option>
</select>

"bu", seçim öğesi, .form ise üst biçimi olacaktır. Sağ?

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.