Oscar Jara
Oscar Jara

Reputation: 14187

jQuery selector to get form by name

I have the following HTML:

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

Just to know, I am not able to modify the HTML in order to add an id or something else.

This is what I tried to get the form element by it's name:

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

console.log(frm);

(but I believe the above code will try to get a children element with the frmSave name inside the form which is not what I need).

How can I achieve this, is it possible to get the form by just the name and using a selector?


Update:

I was doing the wrong way in my original code (I was using a space aka "combinator" in the selector) and not in the code snippet from here so jQuery was trying to get any children element with the name needed and I was asking myself what was wrong since nothing was returned.

The accepted answer gives a better explanation about this so a little space could change everything - I will sleep properly next time :-)

Upvotes: 44

Views: 191666

Answers (4)

Mike Irving
Mike Irving

Reputation: 1628

For detecting if the form is present, I'm using

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

Upvotes: 2

Christian
Christian

Reputation: 19740

$('form[name="frmSave"]') is correct. You mentioned you thought this would get all children with the name frmsave inside the form; this would only happen if there was a space or other combinator between the form and the selector, eg: $('form [name="frmSave"]');

$('form[name="frmSave"]') literally means find all forms with the name frmSave, because there is no combinator involved.

Upvotes: 84

Arun Pratap Singh
Arun Pratap Singh

Reputation: 3646

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

Upvotes: 11

Niet the Dark Absol
Niet the Dark Absol

Reputation: 324620

You have no combinator (space, >, +...) so no children will get involved, ever.

However, you could avoid the need for jQuery by using an ID and getElementById, or you could use the old getElementsByName("frmSave")[0] or the even older document.forms['frmSave']. jQuery is unnecessary here.

Upvotes: 6

Related Questions