Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $(elem).attr(“选中”)给出相反的结果_Javascript_Jquery_Html_Debugging_Checkbox - Fatal编程技术网

Javascript $(elem).attr(“选中”)给出相反的结果

Javascript $(elem).attr(“选中”)给出相反的结果,javascript,jquery,html,debugging,checkbox,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(fun

如果选中复选框,则单击复选框应发出选中的警报;如果未选中,则单击复选框应发出未选中的警报。代码如下:

<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>
MyCheckbox
$(“输入[type=checkbox]”。单击(函数(){
if($(this.attr(“checked”){
警报(“已检查”);
}
否则{
警报(“未检查”);
}
});
最初复选框未选中。我一单击它,调试器就会显示它的checked值true。现在控件应该输入if{}block作为其值为true,但它在else{}block中的输入为true。(我正在使用断点)


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

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

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

$(“输入[type=checkbox]”)。更改(函数(){
如果(选中此项){
警报(“已检查”);
}
否则{
警报(“未检查”);
}
});

我的复选框
此:

$(this).attr("checked") //in old versions of jquery this yield "checked" , 
产生
未定义的
,这是一个错误的语句

从jQuery1.6开始,.attr()方法返回未定义的属性 这还没有确定

您可以使用:

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


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

也可以使用
.prop()
。关于
attr()
prop()
之间的区别,可以找到一个很好的答案。怎么不呢?您可以使用
.prop(“checked”,true)
检查复选框是否已选中。编辑:好的,上面的评论被删除了。这篇评论是针对前一篇。。。页面上甚至有一个例子显示了使用attr()和prop()的区别。谢谢!(this.checked)是否与$(this.prop)(“checked”)相同,或者(if)($(this.is(“:checked”)?是的,是相同的,只是jQuery包装器。我会选择土生土长的东西,更短更清晰。
$(this).prop("checked")