Jquery 每次我在edge上单击checkbox checked属性时,该属性都设置为true
好的,如果您尝试使用internet explorer进行此操作,您将看到每次单击复选框时控制台都会触发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
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向上传播到主体
要修复此行为以跨浏览器工作,您需要检查bodyclick
事件以查看单击的元素是什么。如果不是复选框,则可以取消选中:
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)
,但基本上是一样的)谢谢!