$(elem).attr(“checked”)给出相反的结果

时间:2015-09-06 09:49:24

标签: javascript jquery html debugging checkbox

如果选中,则单击复选框应选中警报,如果没有,则不提供警告。这是代码:

<input type = "checkbox" id = "all" value="all" /> MyCheckbox

 <script src="jquery-2.1.4.js"></script>
<script type="text/javascript">
    $("input[type=checkbox]").click(function(){
    if ($(this).attr("checked")) {   
alert("checked");
}
else{
alert("not checked");
}
});
</script>

最初未选中复选框。一旦我点击它,调试器就会显示它的值为true。现在控制应输入if}} block,因为它的值为true,但是在else {}块中输入。 (我使用断点)。

为什么会这样。请帮助我尝试几个小时。

3 个答案:

答案 0 :(得分:1)

问题是您正在检查checked属性,该属性在检查状态更改时不会被删除或添加。这是您应该了解的属性和属性的细微差别。您需要比较复选框元素的checked 属性,而不是属性。

最好使用change事件处理程序(因为您不仅可以通过鼠标点击复选框,还可以使用键盘复选复选框。)

$("input[type=checkbox]").change(function() {
    if (this.checked) {
        alert("checked");
    }
    else {
        alert("not checked");
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type = "checkbox" id = "all" value="all" /> MyCheckbox

答案 1 :(得分:1)

这:

$(this).attr("checked") //in old versions of jquery this yield "checked" , 

收益率undefined,这是一个虚假陈述。

  

从jQuery 1.6开始,.attr()方法为属性返回undefined   没有设置

您可以使用:

if ($(this).is(":checked"))

$(this).prop("checked")

答案 2 :(得分:0)

jQuery 1.6 开始, .attr()方法为尚未设置的属性返回undefined。要检索和更改DOM属性,例如表单元素的已选中,已选中或已禁用状态,请使用 .prop()方法。