2010-08-30 12 views
18

Próbuję znaleźć formularza nadrzędnego elementu z użyciem kodu poniżej:Jak znaleźć formularz rodzica z elementu?

<form id="f1" action="action1.html"> 
form1 <button id="btn1" onclick="testaction(this); return false;" >test form 1</button> 
</form> 


<script type="text/javascript" > 
function testaction(element) { 
    var e = $(element.id); 
    var form = e.parent('form'); 

    alert(form.id); // undefined!! 
    alert(form.action); // undefined!! 
    alert(document.forms[0].action); //http://localhost/action1.html 
} 
</script> 

powinno to być coś naprawdę proste .... Dzięki z góry

+2

'.parent' tylko dają s bezpośrednim przodkiem. –

+3

Powinieneś po prostu '$ (element)' zamiast '$ (element.id)'. – kennytm

+0

co powiesz na 'btn1.form'? – Sergei

Odpowiedz

12

Problem masz, że form jest obiektem jQuery, a nie obiekt DOM. Jeśli chcesz, aby był obiektem formularza, zrobiłbyś e.parent('form').get(0).

Ponadto niewłaściwie traktujesz element - jQuery przyjmuje selektory id w postaci #id, ale przekazałeś je id.

Oto wersja robocza:

function testaction(element) { 
    var e = $(element);//element not element.id 
    var form = e.parent('form').get(0);//.get(0) added 

    alert(form.id); // undefined!! 
    alert(form.action); // undefined!! 
    alert(document.forms[0].action); //http://localhost/action1.html 
} 

Zobacz to dla niego w akcji: http://jsfiddle.net/BTmwq/

EDIT: ortografia, jasność

+0

Zmienna "forma" powinna być tutaj "niezdefiniowana". Rozwiązanie @jAndy działało. – Roland

38

http://api.jquery.com/closest/ to zrobi. Używane jak ten

$('#elem').closest('form'); 
+4

Najlepsze rozwiązanie, w przeciwieństwie do rodziców() zatrzymuje się, gdy znajdzie dopasowanie –

+0

jak najlepiej z 'btn1.form'? – Sergei

0
$(".whatever").parents("form"); 
+3

closest() jest znacznie lepszym rozwiązaniem, ponieważ zatrzymuje się po znalezieniu dopasowania. –

6

Rzuć obsługi zdarzeń inline pokład i pozostać dyskretny tutaj.

$(document).ready(function(){ 
    $('#btn1').bind('click', function(){ 
     var form = $(this).closest('form')[0]; 

     alert(form.id); // defined 
     alert(form.action); // defined 
    }); 
}); 

Ref .: .closest(), .bind()

+0

'closest (" form ") [0]' było poprawnym rozwiązaniem, zwracając odpowiedni element. 'rodzic ('formularz'). get (0)' zwrócony 'undefined'! – Roland

Powiązane problemy