2012-12-06 13 views
30

Mam następujący html:selektor jQuery, aby uzyskać formę wg nazwy

<form name="frmSave">..</form> 

Wystarczy wiedzieć, jestem nie stanie zmodyfikować html dodać id lub coś innego, więc można łatwo dostać form element w zmiennej.

To, co starałem się dostać element form przez jego nazwę:

var frm = $('form[name="frmSave"]'); 
console.log(frm); 

(ale myślę, że będzie starał się uzyskać element dzieci z nazwą frmSave wewnątrz form co jest źle za co Potrzebuję).

Jak mogę to osiągnąć, jest to możliwe, aby uzyskać form po prostu name z selektora?


UPDATE: robiłem w niewłaściwy sposób w moim kodu źródłowego przez coraz elementy dzieci, jak mówi Christian Varga wyjaśnienie. Jednak umieściłem to tutaj we właściwy sposób, moje złe.

+3

kod jest poprawny. –

+0

Czy na pewno nie ma innych błędów JS na stronie, które powstrzymują to od wykonywania? Sprawdź dzienniki konsoli. – webnoob

+1

Domyślam się, że to było poprawne, ale z jakiegoś powodu wypisuje 'null' na konsoli, dlatego zapytałem, może coś innego może być problemem, ale sprawdzę wszystko ponownie. –

Odpowiedz

56

$('form[name="frmSave"]') jest poprawna. Wspomniałeś, że myślałeś, że to dostanie wszystkie dzieci o imieniu frmsave w formularzu; to by się stało, gdyby nie było tylko przestrzeń lub innego syntezatora pomiędzy formą i selektora, np $('form [name="frmSave"]');

$('form[name="frmSave"]') dosłownie oznacza wszystkie formy z nazwą frmSave, ponieważ nie ma syntezatora zaangażować.

6

Nie masz kombinatora (spacja, >, + ...), więc żadne dzieci nie będą się angażować.

Jednakże, można uniknąć konieczności jQuery przy użyciu ID i getElementById, czy można używać starego getElementsByName("frmSave")[0] lub nawet starszą document.forms['frmSave']. jQuery jest tu niepotrzebny.

+0

'getElementsByName'. Miły. –

+0

'document.querySelector (" form [name = 'frmSave'] ")' też by działało, ale tylko w nowszych przeglądarkach. –

+0

Wiem, że to niepotrzebne, ale pracuję z innym kodem, który wymaga jQuery, dlatego używam go do tego, dzięki za wyjaśnienie btw +1. –

5
// this will give all the forms on the page. 

    $('form') 

    // If you know the name of form then. 

    $('form[name="myFormName"]') 

    // If you don't know know the name but the position (starts with 0) 

    $('form:eq(1)') // 2nd form will be fetched. 
1

Do wykrywania jeśli formularz jest obecny, używam

if($('form[name="frmSave"]').length > 0) { 
    //do something 
}