点击事件有时无法触发(IE6 / IE7 / IE8)

4
我注意到有时IE6/IE7/IE8不总是触发onclick事件(从按钮点击时)。在最后一个onclick事件被触发后,似乎有几秒钟的宽限期。
我决定使用以下代码测试这种行为:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
            <script type="text/javascript">
                window.onload = function(){
                    document.getElementById('clicker').onclick = function(){
                        var i = 0
                        return function(){
                            i+= 1
                            this.value = i.toString()
                        }
                    }()
                }
            </script>
        </head>
        <body>
        <input type="submit" value="click here" id="clicker"/>
    </body>
</html>
浏览器比较(1/4倍速) 您可能已经注意到,在IE 6-8上,需要点击两次按钮才能触发事件,而对于9 / firefox / chrome,每次都会触发事件。

这是什么原因? IE6和8在Windows XP的虚拟机(VirtualBox)上进行了测试。

其他:

  • 我使用“submit”和“button”得到了相同的结果。
  • 使用“Onmouseup”作为onclick的替代似乎可以解决问题。

我不知道为什么,但也许你的文档类型可能有问题?尝试使用HTML5文档类型:<!DOCTYPE html> - Ian
1
IE 6到8不支持HTML5 API。 - TwystO
1个回答

2
在旧版的IE中,您需要同时处理单击和双击事件。如果不这样做,您的双击事件只会被视为第一次单击,从而产生这种假象。请尝试以下操作:
window.onload = function() {
    var i = 0;
    document.getElementById('clicker')
        .onclick = function() { this.value = (i+=1).toString() };
    document.getElementById('clicker')
        .ondblclick = function() { this.value = (i+=1).toString() };
}

1
谢谢,这解决了我的问题。不知何故,Onmouseup 似乎也可以工作。 - user2373941

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接