为什么这个简单的if:checked输入正常工作?

时间:2013-04-03 09:18:11

标签: jquery html5

我有一个收音机输入,并在页面上的其他位置按钮上,检查是否已选中,并将选中的值更改为开启或关闭。

输入如下:

<input type="radio" name="send" value="1"  checked="true" />

或者

<input type="radio" name="send" value="1"  />

我有相当简单的jQuery来进行检查:

$input = $('input[name=send]');

if( $input.is(":checked") ) 
{
    $input.attr("checked", false);
}
else
{
    $input.attr("checked", true);
}   

问题是,如果页面加载并且检查了输入,由于某种原因,我需要在识别语句的else部分之前单击该按钮两次。

如果页面以未选中的输入开头,则在第一次单击该按钮时,它将按预期工作。然后每次点击都有效。但是,如果检查输入,则不是初始加载。

将输入标记为已检查的正确方法是什么?

如何在输入[type = radio]上完成正确的if / else语句以查看它是否已被检查?

4 个答案:

答案 0 :(得分:3)

使用prop()来访问checked checkbox的{​​{1}}属性,而不是attr,它发生在jQuery 1.9上,它适用于jQuery 1.8.3,但最好使用prop()

if( $input.is(":checked") ) 
{
    $input.prop("checked", false);
}
else
{
    $input.prop("checked", true);
}   

正如@ÁlvaroG。Vicario所说,你可以使用if( $input.prop("checked") )

答案 1 :(得分:2)

改为使用.prop()

$input.prop("checked", false/true);

所以在你的代码中:

if($input.is(":checked")){
    $input.prop("checked", false);
}else{
    $input.prop("checked", true);
}

答案 2 :(得分:2)

checked是复选框的属性,因此请使用.prop()代替.attr()

checked属性的存在会检查复选框,无论其值如何。

答案 3 :(得分:2)

这很可能是你想要的。

$input.prop('checked', function(i, oldVal){
    return !oldVal;
});

你正在处理两个单选按钮......所以这将有效。