Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery :not and :first ordering

I am trying to get the first input field in a form that isn't disabled or hidden. I need to be able to exclude radio buttons, selects, and particular IDs.

The following code works perfectly, EXCEPT when a select comes before the text or password field that I want:

$("form :input:visible:enabled:first:not('select')");

If I exclude the :not('select'), the select is returned as the first input field (correctly so, as :input returns pretty much all form elements). However, when I include the :not('select'), nothing is picked up. Any ideas?

Second part to this question - I assume it is ok to chain :nots so I could have something like:

$("form :input:visible:enabled:first:not('select'):not(#specific_id):not(type[radio])");
like image 800
Al. Avatar asked Jan 22 '23 18:01

Al.


2 Answers

Would it work if you swap the :not and the :first?

`$("form :input:visible:enabled:not('select'):first");`

The way you have it, it selects the first enabled tag, which a set of just one. If that one is a select, you get nothing. With this version, it gets everything that isn't a select, and then takes the first element of that set.

like image 71
Tesserex Avatar answered Jan 24 '23 09:01

Tesserex


Using Tesserex's answer, you can also join several not's.

$("form :input:visible:enabled:not('select, :radio, #id, .class'):first");

Just separate by commas as you would in any other jQuery tag.

like image 39
Capt Otis Avatar answered Jan 24 '23 07:01

Capt Otis