Javascript 什么';跨浏览器捕获按钮上所有单击的方式是什么?

Javascript 什么';跨浏览器捕获按钮上所有单击的方式是什么?,javascript,jquery,internet-explorer,cross-browser,dom-events,Javascript,Jquery,Internet Explorer,Cross Browser,Dom Events,无论单击速度和浏览器如何,在每次单击按钮时执行一次函数的最佳方式是什么 简单地绑定一个“点击”处理程序在除IE之外的所有浏览器中都能完美地工作 在IE中,当用户点击过快时,只有“dblclick”触发,因此“click”处理程序永远不会执行。其他浏览器会触发这两个事件,因此这对它们来说不是问题 显而易见的解决方案/黑客(至少对我来说)是在IE中附加一个dblclick处理程序,它会触发我的点击处理程序两次。另一个想法是使用mousedown/mouseup跟踪自己的点击,它看起来非常原始,可能属

无论单击速度和浏览器如何,在每次单击按钮时执行一次函数的最佳方式是什么

简单地绑定一个“点击”处理程序在除IE之外的所有浏览器中都能完美地工作

在IE中,当用户点击过快时,只有“dblclick”触发,因此“click”处理程序永远不会执行。其他浏览器会触发这两个事件,因此这对它们来说不是问题

显而易见的解决方案/黑客(至少对我来说)是在IE中附加一个dblclick处理程序,它会触发我的点击处理程序两次。另一个想法是使用mousedown/mouseup跟踪自己的点击,它看起来非常原始,可能属于一个框架,而不是我的应用程序


那么,最好/通常/正确的处理方法是什么?(首选纯Javascript或jQuery)

根据您的情况,您可以使用不同的方法,但我建议对jQuery使用命名空间事件处理程序,如下所示:

function eventHandler(event) {
    // your handler code here
    doSomeMagic();
}

var element = $('#element');

element.one('click.someNameSpace', function(event){
    // first we unbind all other event handlers with this namespace
    element.unbind('.someNameSpace');

    // then we execute our eventHandler
    eventHandler();
}).one('dblclick.someNameSpace',  function(event){
    // If this fires first, we also unbind all event handlers
    element.unbind('.someNameSpace');

    // and then execute our eventHandler
    eventHandler();
});

我不确定这是否会按您希望的方式工作,但我想这是一个开始。

鼠标向下和鼠标右键的工作原理与单击功能一样,不幸的是,当IE由于双击而忽略单击时,它也会忽略鼠标向下和鼠标右键。在任何情况下,您都可以将click和dblclick添加到同一对象中,并通过一个函数为单击提供信息,该函数可以对与上一次单击过近的任何单击进行排序

<div onclick="clk()" ondblclick="clk()"></div>

lastclicktime=0
function clk(){
    var time=new Date().getTime()
    if(time>lastclicktime+50){
        lastclicktime=time
        //Handle click
    }
}

lastclicktime=0
函数clk(){
var time=new Date().getTime()
如果(时间>上次单击时间+50){
lastclicktime=时间
//手柄点击
}
}

顺便说一句,我刚刚发现,至少在Firefox中,dblclick事件没有给定事件时间,因此我必须解析为Date方法。

看起来很有趣,从未使用过命名空间事件,谢谢!它是如此有用,不知道为什么我错过了阅读jq博士