我有input[type=checkbox]
,当我更改其checked
属性时,这不会在现代浏览器中生成change
事件。
IE9-虽然在我执行propertychange
时触发element.checked = true;
事件。
如何区分浏览器生成的propertychange
事件,但代码更改checkbox
的结果与真人检查checkbox
?
经过深思熟虑之后,我唯一的想法就是检查:
if (
document.activeElement != event.target
&& event.type == 'propertychange'
&& event.propertyName == 'checked'
) // its syntetic
但如果复选框有focus
并且代码已更改,则会失败,如果通过<label>
更改复选框,也会失败。
IE9中是否有任何属性 - event
我可以检查一下,或者检测一下这个属性吗?
答案 0 :(得分:1)
您可以只监听click
事件,只要用户更改了属性,您就会收到通知,但是当它以编程方式更改时,您将收到通知。我已经在Chrome和IE 9,10,11中对此进行了测试,只需单击复选框,点击包含标签,甚至空格键即可更改复选框。<\ n / p>
工作演示:http://jsfiddle.net/jfriend00/tdhpaqs8/
document.getElementById("test").addEventListener("click", function(e) {
// checkbox was changed by the user
});