views:

10599

answers:

4

(answers aggregated into another question)

The following jquery 1.3.2 code works:

<input type="select" value="236434" id="ixd" name='ixd' />

<script>
console.log( $('#ixd') );
console.log( $("input[name='ixd']") );
</script>

Console shows:

[input#ixd 236434]

[input#ixd 236434]

However setting the input to "hidden" prevents the selectors working. Any clues?

<input type="hidden" value="236434" id="ixd" name='ixd' />

<script>
console.log( $('#ixd') );
console.log( $("input[name='ixd']") );
</script>

Console shows:

[]

[]

+6  A: 

Not sure why that would be failing. I do the same thing at work on a regular basis, and it works regardless of the formfield being hidden or not.

Perhaps try this:

<input type="hidden" value="236434" id="ixd" name='ixd' />

<script>
    console.log($("#xid").val())
</script>

That will get you the value of the hidden field. I'm not terribly familiar with jQuery, but perhaps it won't retrieve DOM elements that aren't supposed to be visible?

Mike Trpcic
+1: He should be using .val() to retrieve the value of the field.
Jon Tackabury
Tried that, I was trying to point out that the selectors were not functioning rather than use the output :)
Andy
Also, this code doesn't work either!
Andy
Sorry, I have no idea then. I use jQuery with hidden fields all the time with no issues.
Jon Tackabury
It appears it's a firebug bug of some description, thanks for your prompt reply :) http://stackoverflow.com/questions/997296/jquery-hidden-field-not-accessible-until-document-ready-called/997371#997371
Andy
I just encountered a similar problem and .val() did not work for me. document wasn't loading fast enough for it, had to wrap a document.ready around it to work (which was not an option). However, .attr('value') worked w/out being wrapped in document.ready, so +1 that this may work but +1 to .attr('value') too. IOW to other people in same boat, try the different ways listed in the answers!
Crayon Violent
+1  A: 

This may be more of an issue with the console. I ran a test and it seems to still grab the instance of the element. I can't exactly tell what you are trying to do here.

If you are just trying to validate wether the object was found check the length property

console.log( $('#xid').length );

If you are trying to get the value of the field then use the val method

console.log( $('#xid').val() );

Finally, its possible that in your solution the DOM hasn't fully loaded yet. Make sure you are wrapping your logic inside a document.ready call.

$(document).ready(function() {
    console.log( $('#xid').val() );
});
bendewey
Many thanks, this is the solution - but why does this not work in this instance when the <script> tags are below the element "declaration"? Usually this sort of operation doesn't require $(document).ready - why would it only be necessary when the input is hidden?
Andy
@Andy, I don't know, I wonder if that's the case with all browsers?
bendewey
sorry for necroing but I just now dealt with a similar problem. Turns out that the document wasn't loading fast enough for there to be a value in the hidden field, and using document.ready solved it (and this was only happening in firefox...seemed to work just fine in IE and chrome...). But document.ready was not an option for me, so I wanted to also point out that using .attr('value') may indeed work instead of .val(). For some reason it worked for me whereas .val() did not (unless it was wrapped in document.ready, of course).
Crayon Violent
A: 
<input type="select" value="236434" id="ixd" name='ixd' />

Is that even valid markup?

It appears that selecting a visible input retrieves the value of it, even without explicity calling .val(), whereas selecting a hidden one does not:

Try:

console.log( $('#ixd').val() );
console.log( $("input[name='ixd'][type='hidden']") );

and

console.log( $("input[name='ixd']").val() );
karim79
A: 

/*

Jquery seems to miss the hidden input from the standard :input selector. Note the other bit of code:

$("input[type=hidden]").each( function() { stringX += $(this).attr('name') + "=" + escape($(this).attr('value')) + "&"; });

The function below makes it easy to post all input fields via ajax. Radio button support is missing in the function below. I'll probably post an update to this function soon to cater for full post support. Contact me at http://www.ionicdata.com should you like to be notified once this function is complete. */

function inputToSubmit() { var stringX = ''; //process all enabled input $(":input:enabled").each( function() {

 switch ($(this).attr('type'))
 {
  case 'submit':

  break;
  case 'button':

  break;

  default:
        stringX += $(this).attr('name') + "=" + escape($(this).attr('value')) + "&";
  break;

 }


});

//jquery does not seem to find hidden input.
$("input[type=hidden]").each( function() {
   stringX += $(this).attr('name') + "=" + escape($(this).attr('value')) + "&";
});


return (stringX);

}

Noesis