【问题标题】:Why doesn't this simple if : checked input work properly?为什么这个简单的 if : checked input 不能正常工作?
【发布时间】:2013-04-03 17:28:59
【问题描述】:

我有一个单选输入,在页面其他位置的按钮上,我检查它是否被选中,并将选中的值更改为开或关。

输入看起来像:

<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 部分。

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

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

如何在 input[type=radio] 上执行正确的 if / else 语句以查看它是否被检查?

【问题讨论】:

  • $input.prop('checked',!$input[0].checked); ?或者更好的$input[0].checked = !$input[0].checked

标签: jquery html


【解决方案1】:

使用prop() 来访问checkedchecked 属性而不是attr,它发生在我的jQuery 1.9 中,它适用于jQuery 1.8.3,但最好使用prop()

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

正如@Álvaro G. Vicario 所说,您可以使用if( $input.prop("checked") )

【讨论】:

  • 或者更好:if( $input.prop("checked") )prop() 方法是一个很好的补充。
【解决方案2】:

改用.prop()

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

所以在你的代码中:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      这很可能是您想要的。

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

      您正在处理两个单选按钮...所以这将起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-30
        • 2023-02-20
        • 1970-01-01
        相关资源
        最近更新 更多