Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.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 IE不开火';改变';单击“不确定事件”复选框时将其选中_Jquery_Html_Internet Explorer_Checkbox - Fatal编程技术网

Jquery IE不开火';改变';单击“不确定事件”复选框时将其选中

Jquery IE不开火';改变';单击“不确定事件”复选框时将其选中,jquery,html,internet-explorer,checkbox,Jquery,Html,Internet Explorer,Checkbox,我有一个三态复选框,我需要在用户单击它时触发更改事件,但当复选框的状态为“不确定”(可能是浏览器错误?)时,IE不会触发它。 作为IE的解决方案,我可以通过编程方式触发更改事件,但这不适用于我的情况,因为我需要知道事件是否因为用户实际单击而触发 点击我 var checkbox=document.getElementById(“cb”); checkbox.undeterminate=true; $('#cb').change(function(){alert('change Event')

我有一个三态复选框,我需要在用户单击它时触发更改事件,但当复选框的状态为“不确定”(可能是浏览器错误?)时,IE不会触发它。
作为IE的解决方案,我可以通过编程方式触发更改事件,但这不适用于我的情况,因为我需要知道事件是否因为用户实际单击而触发


点击我
var checkbox=document.getElementById(“cb”);
checkbox.undeterminate=true;
$('#cb').change(function(){alert('change Event')});
我读过这篇文章,但我可以为我的案例找到一个具体的解决方案

有没有办法解决这个问题


提前感谢。

复选框输入只能有两种状态:选中或未选中。不确定状态仅为可视状态,它掩盖了复选框的真实状态

第一次单击其不确定设置为
true
的复选框时,只需将其更改为
false
,复选框将显示其真实状态。因此,从“不确定”到“已检查”或“未检查”的更改不是真实状态的更改,也不会触发
onchange
事件

有趣的是,唯一能够正确实现此行为的浏览器是IE。您可以在IE和其他浏览器中测试这一点:

document.getElementById(“cb1”).Undeterminate=true;
document.getElementById(“cb2”).undeterminate=true
我真的被检查过了

我实际上没有检查
我已经读过了,不会为我的案例工作,只是测试了一下,不工作。看起来它会工作,但这是一个丑陋的修复(它也处理空格键):不确定您预期的行为是什么,但您可以调度事件:看看这是否符合您的需要,以明确正确的行为,规范说,点击一个不确定的复选框应该切换该值。IE只是删除了不确定状态。@ClarkPan是的,该文档中的规范令人困惑。它清楚地表明,除了更改复选框控件的外观外,不确定属性没有任何效果。这意味着IE行为是正确的。但是它说,点击前激活步骤包括将元素的checkendness设置为相反的值,这与假设点击前激活意味着点击其不确定设置为false的复选框的第一条语句相矛盾。这是解释它的一种方式,似乎是IE团队的方式。我的解释是,不考虑不确定属性,单击复选框将切换选中状态。在这种情况下,单击不确定复选框的正确行为是删除不确定标志,然后将选中的更改为与其当前值相反。其他浏览器就是这样做的。即,仅将不确定状态设置为false,但不切换基础检查状态。这就是它不触发更改事件的原因。@ClarkPan是的,这正是我在回答中想要说的。有如此模糊的规格,却有不同的解释,这真是令人恼火。制定标准的唯一原因是每个人都以完全相同的方式实施规范。含糊不清的标准/规范使我们面临一个问题,即它的实现方式不同,使得标准/规范几乎毫无意义。请注意,现实情况可能涉及修复与复选框、按键和touchstart事件链接的标签的此问题。
<label for="cb">
  <input id="cb" type="checkbox" />
   click me
</label>

var checkbox = document.getElementById("cb");
checkbox.indeterminate = true;
$('#cb').change(function(){alert('Change Event')});