将人类生成的事件与旧IE中生成的浏览器区分开来

时间:2015-02-24 22:41:40

标签: javascript internet-explorer

我有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我可以检查一下,或者检测一下这个属性吗?

jsFiddle:http://jsfiddle.net/uuwe7ojc/

1 个答案:

答案 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
});