2009-06-13 9 views
77

Potrzebuję uzyskać odniesienie do rodzica FORM dla INPUT, gdy mam tylko odniesienia do tego INPUT. Czy to możliwe dzięki JavaScript? Użyj jQuery, jeśli chcesz.Jak uzyskać formularz macierzysty danych wejściowych?

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

To nie działa:

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

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

$ (element) .parents ('forma: najpierw'); działa dla mnie przy użyciu jQuery 1.4.2 (tak stary) – Kreker

Odpowiedz

136

rdzennych elementów DOM, które są wejściami również mieć atrybut form wskazujący na formularzu, do którego należą:

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

Według w3schools , właściwość .form właściwości pól wejściowych jest obsługiwana przez IE 4.0+, Firefox 1.0+, Opera 9.0+, czyli jeszcze więcej przeglądarek, które jQuery gwarantuje, więc powinienem się tego trzymać.

Gdyby to był inny rodzaj elementu (a nie <input>), można znaleźć najbliższy rodzica z closest:

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

także zobaczyć ten link MDN na nieruchomości form z HTMLInputElement:

+0

W porządku to działa .. O atrybucie formularza. Po prostu to wypróbowałem i to też działa. Ale nie jest to obsługiwane w różnych przeglądarkach, które mówisz? – Ropstah

+0

Jestem prawie pewien, że tak. Po prostu nie jestem w 100% pewny, więc nie chcę niczego obiecywać. Zajmuję się tym teraz ... –

+4

Użyj element.form - będzie działać na większej liczbie przeglądarek niż jQuery. Jest to także jedno odniesienie do właściwości, więc będzie około tysiąckrotnie wydajniejsze niż podchodzenie do drzewa DOM z najbliższym(). – NickFitz

3

Korzystanie jQuery:

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

Każde wejście ma właściwość form co wskazuje na formularzu wejście należy, tak prosto:

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

to nie działa jakoś ...? – Ropstah

+0

@ Ropstah - jest późno, ale 'element' to po prostu węzeł DOM, a nie obiekt jquery. użycie jquery byłoby $ (element) .attr ("formularz"), jak zauważa Paolo w zaakceptowanej odpowiedzi. – ps2goat

2

Musiałem użyć element.attr ('form') zamiast elementu .form

używam firefox na Fedorze 12

2

Jeśli przy użyciu jQuery i posiada uchwyt do dowolnego elementu formularza, trzeba dostać (0) elementu przed użyciem .form

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

używam trochę jQuery i starym stylu JavaScript - mniej kodu

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

Jest to kompletny odnośnik do formularza zawierający element

+1

'$ (this.form)'. – Endless

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

oraz w html , musisz znaleźć ten element i dodać "formularz" attribut, aby połączyć się z tym formularzem, zapoznaj się z http://www.w3schools.com/tags/att_input_form.asp , ale ten formularz attr nie obsługuje IE, ponieważ np. Musisz bezpośrednio przekazać identyfikator formularza.

-2

czy to działa? (pozostawiając puste pole samo przesłania formularza, prawda?)

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

"to" będzie elementem wybranym, .form będzie jego formą nadrzędną. Dobrze?

0

prostu jako:

alert($(this.form).attr('name')); 
0

i jeszcze jedno ....

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 
Powiązane problemy