Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.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
Jquery 每次我在edge上单击checkbox checked属性时,该属性都设置为true_Jquery_Html - Fatal编程技术网

Jquery 每次我在edge上单击checkbox checked属性时,该属性都设置为true

Jquery 每次我在edge上单击checkbox checked属性时,该属性都设置为true,jquery,html,Jquery,Html,好的,如果您尝试使用internet explorer进行此操作,您将看到每次单击复选框时控制台都会触发true,因为ie将在change事件之后触发click事件 因此,如果将.prop('checked',false)更改为true,它将正常工作(因为读取事件的顺序) var checkd=false; $('input[type=checkbox]')。在('change',function()上{ checkd=this.checked; console.log($(this.prop

好的,如果您尝试使用internet explorer进行此操作,您将看到每次单击复选框时控制台都会触发
true
,因为ie将在
change
事件之后触发
click
事件

因此,如果将
.prop('checked',false)
更改为true,它将正常工作(因为读取事件的顺序)

var checkd=false;
$('input[type=checkbox]')。在('change',function()上{
checkd=this.checked;
console.log($(this.prop('checked'));
});
$('body')。在('click',function()上{
如果(检查D){
$('input[type=checkbox]')。prop('checked',false);
}
});

问题在于事件的执行顺序。在Edge中,单击
主体上的
将排在第一位,即使单击复选框也是如此。在Chrome和其他(好的)浏览器中,首先触发复选框上的
单击
更改
,然后将DOM向上传播到
主体

要修复此行为以跨浏览器工作,您需要检查body
click
事件以查看单击的元素是什么。如果不是复选框,则可以取消选中:

var checkd=false;
$('input[type=checkbox]')。关于('change',函数(e){
checkd=this.checked;
console.log($(this.prop('checked'));
});
$('body')。在('click',函数(e)上{
if(e.target.tagName!==“输入”&&checkd){
$('input[type=checkbox]')。prop('checked',false);
}
});

很好,我应该考虑一下,哈哈。非常简单。(例如,我是这样做的
!$('input[type=checkbox]')。是(e.target)
,但基本上是一样的)谢谢!