2015-09-06 66 views
2

点击复选框应该给予警报检查,如果选中并给出警报不检查,如果不是。代码如下:

<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 {} block。 (我正在使用断点)。

为什么会发生这种情况。请帮忙尝试几个小时。

+2

您也可以使用'.prop()'。有关'attr()'和'prop()'之间区别的一个很好的答案可以在这里找到(http://stackoverflow.com/questions/5874652/prop-vs-attr) –

+0

怎么样?你可以使用'.prop(“checked”,true)'来检查复选框是否被选中。 *编辑*:好的,上面的评论被删除。这个评论是针对前一个... –

+0

http://api.jquery.com/prop/甚至有一个例子显示了attr()和prop()之间的区别。 – sinisake

回答

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

+0

谢谢! (this.checked)与$(this).prop(“checked”)相同或if($(this).is(“:checked”))? – mustafa1993

+0

是的,它是一样的,只是jQuery包装。我会与本土的东西,更短,更清晰。 – dfsq

1

此:

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

息率undefined这是一个Falsy声明。

在jQuery 1.6,未定义尚未设置

您可以使用属性 的.attr()方法返回:

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

$(this).prop("checked") 
0

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

相关问题