Onclick事件有时不会触发(IE6 / IE7 / IE8)

时间:2013-05-12 16:53:55

标签: javascript internet-explorer onclick

我注意到有时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>

Browser Comparison (at 1/4 speed) 正如您可能看到的那样,只需点击两下按钮即可在IE 6-8上触发事件,而对于9 / firefox / chrome,事件每次都会触发。

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

其他:

  • “提交”和“按钮”的结果相同。
  • 使用'Onmouseup'替代onclick似乎有效。

1 个答案:

答案 0 :(得分:2)

在IE的旧版本中,您必须同时处理Click和Double。

如果你不这样做,只会点击你的双击第一次点击,给你这种错觉。

试试这个:

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() };
}