tags:

views:

253

answers:

5

I'm having trouble after looking at the jQuery docs. I'm just trying to return true/false in one my my jquery methods depending on the check of a certain radiobutton and if it's selected or not

I've tried several things but have not been able to get this right:

<input type="radio" runat="server" name="testGroup" id="test1" /><label for="<%=test1.ClientID %>" style="cursor:hand" runat="server">Test1</label>
<input type="radio" runat="server" name="testGroup" id="test2" /><label for="<%=test2.ClientID %>" style="cursor:hand" runat="server">Test2</label>
<input type="radio" runat="server" name="testGroup" id="test3" /> <label for="<%=test3.ClientID %>" style="cursor:hand">Test3</label>

and in my method I have this:

return $("input[@name='test2']:checked");

I'm getting an undefined on $("input[@name='test2']:checked");

UPDATED:

example:

this returns 'undefined' still:

$("input[@name=radioGroup]:checked").attr('payPalRadioButton');

If I try this, I get 'false' even if I select the radio button:

$('input:radio[name=radioGroup]:checked').val() == 'paypalSelected'

A: 

You should remove the '@' before 'name'; it's not needed anymore (for current jQuery versions).

You're want to return all checked elements with name 'test2', but you don't have any elements with that name, you're using an id of 'test2'.

If you're going to use IDs, just try:

return $('#test2').attr('checked');
Cory Larson
I'm still getting an undefined..it doesn't know what #test2 is.
CoffeeAddict
+1  A: 

1.You don't need the @ prefix for attribute names any more:

http://api.jquery.com/category/selectors/attribute-selectors/:

Note: In jQuery 1.3 [@attr] style selectors were removed (they were previously deprecated in jQuery 1.2). Simply remove the ‘@’ symbol from your selectors in order to make them work again.

2.Your selector queries radio buttons by name, but that attribute is not defined in your HTML structure.

naivists
well name would be the same for all 3 radiobuttons since it's a group in this case.
CoffeeAddict
exactly, it IS the same, but you still need it there
naivists
I have name...so not sure what the problem is?? :(
CoffeeAddict
the problem is `name='test2'` -- the name of your radio group is actually `testGroup`
ghoppe
+2  A: 

Your selector won't select the input field, and if it did it would return a jQuery object. Try this:

$('#test2').is(':checked"); 
PetersenDidIt
it's returning false every time even though I select lets say test2
CoffeeAddict
how are you calling it?
PetersenDidIt
Dear God .NET forgot about the unique random clientID it creates for ID.
CoffeeAddict
A: 

I think you're using the wrong approach. You should set the value attribute of your input elements. Check the docs for .val() for examples of setting and returning the .val() of input elements.

ie.

<input type="radio" runat="server" name="testGroup" value="test2" />

return $('input:radio[name=testGroup]:checked').val() == 'test2';
ghoppe
well I can't go and change all that now. That would require a lot of refactoring on our current page.
CoffeeAddict
regex for the win! Just replace your ids with values. Point is, input elements (especially check boxes and radio buttons) should have a value. More info: http://www.w3.org/TR/html401/interact/forms.html#h-17.4
ghoppe
$('input:radio[name=bar]:checked').val(); so we don't have value in there I suppose that defaults then to 0,1, and 2 respectively
CoffeeAddict
That may be, but I'm not sure you can rely on it. See the w3.org documents I linked -- `value` is optional except when the type attribute has the value "radio" or "checkbox".
ghoppe
I still get false per your example when I select the button
CoffeeAddict
A: 

WHy bother with all of the fancy selectors? If you're using those id="" attributes properly, then 'test2' must be the only tag with that id on the page, then the .checked boolean property will tell you if it's checked or not:

if ($('test2').checked) {
    ....
}

You've also not set any values for those radio buttons, so no matter which button you select, you'll just get a blank "testGroup=" submitted to the server.

Marc B