7

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)

Nick Craver
  • 623,446
  • 136
  • 1,297
  • 1,155
questioner
  • 775
  • 4
  • 9
  • 15

6 Answers6

11

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
  • 56,416
  • 14
  • 107
  • 150
4

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

$(":text[value=]")

I just removed single quotes in selector.

Seb
  • 24,920
  • 5
  • 67
  • 85
  • This seems to work for me too. Although, I'm not sure if it is 100% equivalent. I'm afraid that it might act as `$(":text[value]")` in some situation. – Matthijs Wessels Jan 23 '12 at 16:04
2

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

$(":text[value='']")
Shog9
  • 156,901
  • 35
  • 231
  • 235
1

The following code does this:

  1. Searches the form for inputfields and textareas
  2. Checks if the text value is empty or not
  3. gives the textfield/textarea a black background-color to prove this works

    $('form').find("input[type=text], input[type=password], textarea").each(function(ev)
    {
    
    if(!$(this).val())
    {
       $(this).css("background-color","black");
    }
    
    });
    
vladkras
  • 16,483
  • 4
  • 45
  • 55
Nicholas
  • 5,430
  • 3
  • 21
  • 21
1

This seems to work for me

$(":text:not([value])")
Neil Aitken
  • 7,856
  • 3
  • 41
  • 40
  • 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. – questioner Mar 11 '09 at 17:24
  • I had a feeling it may be problematic, as it only specifies the attribute and not the value. – Neil Aitken Mar 11 '09 at 19:44
-2

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

$(":text:empty")
Steve Paulo
  • 17,954
  • 2
  • 23
  • 23