views:

2796

answers:

5

How can I find all text fields that have an empty value?

$(":text[value='']")

gives a JavaScript error

I know I can do $(":text"), iterate through and return all fields with $(this).val()==''

I am looking for a cleaner method and using JQuery 1.3.1 It has to work if the element originally had a value when the page was loaded, and then the user cleared it. ($("#elem").attr('value') gives the original value in that place, though .val() works properly)

+2  A: 

You were close. There's no assignment in jQuery selectors, so you only need a single '=':

$(":text[value='']")
Shog9
sorry, question edited to remove the extra '='. That gives me an error using jquery 1.3.1
ngz
Seems the issue is with passing an empty value to an attribute selector.
Neil Aitken
I'm not sure what you're doing ngz, but this answer works for me. theres the potential though your empty values are getting removed from the dom :)
Kent Fredric
A: 

Shot in the dark as I haven't tested it, but does this work:

$(":text:empty")
Steve Paulo
No, :empty will select all text fields, because it matches fields with no children
ngz
+1  A: 

This seems to work for me

$(":text:not([value])")
Neil Aitken
this does not give a Javascript error, but if the element originally had a value and the user cleared it, it will not be selected.
ngz
I had a feeling it may be problematic, as it only specifies the attribute and not the value.
Neil Aitken
+7  A: 

Latest Answer: Upgrade to 1.3.2

Here are various tests I ran via FireBug on http://docs.jquery.com/Downloading_jQuery

Different jQuery versions are switched in at page-load with special greasemonkey scripts.

>>> jQuery.prototype.jquery
"1.3.2"
>>> jQuery(":text[value='']")
[input#jq-primarySearch]
Unknown pseudo-class or pseudo-element 'text'.
>>> jQuery(":text[value=]").get()
[input#jq-primarySearch]

>>> jQuery.prototype.jquery
"1.3.1"
>>> jQuery(":text[value='']")
Syntax error, unrecognized expression: value='']
>>> jQuery(":text[value=]").get()
[input#jq-primarySearch]

>>> jQuery.prototype.jquery
"1.3"
>>> jQuery(":text[value='']");
Object length=1 prevObject=Object context=document
Unknown pseudo-class or pseudo-element 'text'.
[Break on this error] undefined
>>> jQuery(":text[value=]").get()
[input#jq-primarySearch]

Note that 1.3 and 1.3.2 handle it properly ( albeit with Firefox sending an error ) but they still get the node right.

Alternatively: you could use the :text[value=] notation, which appears to work everywhere I tried it. Its just a bit suspect thats all.

( Ignore my Previous rantings, they're all bollocks, not having a good day -_-)

Kent Fredric
this doesn't work in jquery 1.3.1
ngz
So only 1.3.1 has this problem... Thanks
ngz
+1  A: 

I've just tried this and worked fine for me:

$(":text[value=]")

I just removed single quotes in selector.

Seb