2011-03-11 108 views
27

我正在检查收音机。既不以下工作:.attr('checked','checked')不起作用

[编辑]

$('selector').attr('checked','checked'); 
$('selector').attr('checked',true); 

分别两个警报()在下面的代码显示 “1” 和 “a”。我的期望是显示“b”的第二个警报()。

Opera不检查浏览器中的第二个无线电盒,但其元素检查器蜻蜓显示DOM未被更改。

[编辑完]

我读过的常见问题之前,我张贴了这个问题:

http://docs.jquery.com/Frequently_Asked_Questions#How_do_I_check.2Funcheck_a_checkbox_input_or_radio_button.3F

帮助将非常感激!

TIA

XHTML页面和代码如下:

<!DOCTYPE html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
<title>Weird Behavior</title> 
<script type="text/javascript" src="scripts/jquery.js"/> 
<script type="text/javascript"> 
function clickme(){ 
    alert($('input[name="myname"][value="b"]').length); 
    $('input[name="myname"][value="b"]').attr('checked','checked'); 
    $('#b').attr('checked',true); 
    alert($('input[name="myname"][checked]').val()); 
}; 
</script> 
</head> 
<body> 
    <form action=""> 
     <fieldset> 
      <legend>Why check is not switched?</legend> 
      <input type="radio" name="myname" value="a" id="a" checked="checked"/>A 
      <input type="radio" name="myname" value="b" id="b"/>B 
     </fieldset> 
    </form> 
    <p> 
    <button type="button" onclick="clickme()">click me</button> 
    </p> 
</body> 
</html> 
+0

你如何检查生成的DOM源? – Sander 2011-03-11 08:40:21

+2

'$('some element selector')。attr('checked','checked');' – 2011-03-11 08:42:57

+0

@experimentX:这就是示例源代码中的内容,不是吗? – BoltClock 2011-03-11 08:45:58

回答

13

使用jQuery,绝对不要使用内联onclick javascript。保持不显眼。做到这一点,并完全删除onclick

此外,请注意在最后一行使用:checked伪选择器。原因是因为一旦页面被加载,HTML和表单元素的实际状态可能会不同。打开一个Web检查器,你可以点击另一个单选按钮,HTML将仍然显示第一个被选中。 :checked选择器会过滤实际检查过的元素,而不管html以什么开始。

$('button').click(function() { 
    alert($('input[name="myname"][value="b"]').length); 
    $('input[name="myname"][value="b"]').attr('checked','checked'); 
    $('#b').attr('checked',true); 
    alert($('input[name="myname"]:checked').val()); 
}); 

http://jsfiddle.net/uL545/1/

+0

是的,使用jQuery来添加事件侦听器更好,但是您的解释是错误的。该功能找到了,你的演示仍然回声'a'(它应该回显'b')。 – 2011-03-11 08:53:43

+0

菲利克斯好点,谢谢。答案已更新。 – 2011-03-11 08:59:40

+0

@Squeegy:伪选择器':checked'确实做到了。非常感谢你! 虽然我得到的代码工作,我仍然不明白无线电复选框的行为。看起来'checked'属性的行为与其他行为不同。 如以下示例所示,第二个alert()正确显示'b',但第一个alert()弹出'a',这超出了我的预期。 你能为我解释更多关于这个吗? '$('#b')。attr('checked',true); $('#b')。addClass('test'); ($('input [name =“myname”] [checked]')。val()); alert($('[class =“test”]')。val());' – 2011-03-12 04:11:00

1

我不认为你可以调用

$.attr('checked',true); 

因为首先没有元素选择。 $必须后跟$('selector_name')。祝你好运!

1

它的工作原理,但

$('input[name="myname"][checked]').val() 

将与属性checked返回第一要素的价值。而a单选按钮仍然具有此属性(并且它位于b按钮之前)。选择b不会删除checked属性来自a

您可以使用jQuery的:checked

$('input[name="myname"]:checked').val() 

DEMO


其它注意事项:

  • 使用$('b').attr('checked',true);就足够了。
  • 正如别人提到的,不要使用内联事件处理程序,使用jQuery添加事件处理程序。
1
$("input:radio").attr("checked",true); //for all radio inputs 

$("your id or class here").attr("checked",true); //for unique radios 

同样对同一作品( “选中”, “选中”)

108
$('.checkbox').attr('checked',true); 

not work with from jQuery 1.6

而是使用

$('.checkbox').prop('checked',true); 
$('.checkbox').prop('checked',false); 
+9

非常感谢您收到此提示!我正在脱发。 – ellmo 2013-04-17 16:48:42

+0

同样在这里,非常感谢。我正在使用jQuery版本10. – 2013-07-12 05:01:50

+0

这是一个皮塔,这个答案是不被接受的,接受的需要这么多的屏幕空间... – dermatthias 2013-10-29 10:20:26

9
$('.checkbox').prop('checked',true); 
$('.checkbox').prop('checked',false); 

...与jquery1.9.1

3

完美的作品为什么不试试IS

$('selector').is(':checked') /* result true or false */ 

看常见问题解答: jQuery .is() 嘱咐我们;-)

相关问题