Javascript 什么';跨浏览器捕获按钮上所有单击的方式是什么?
无论单击速度和浏览器如何,在每次单击按钮时执行一次函数的最佳方式是什么 简单地绑定一个“点击”处理程序在除IE之外的所有浏览器中都能完美地工作 在IE中,当用户点击过快时,只有“dblclick”触发,因此“click”处理程序永远不会执行。其他浏览器会触发这两个事件,因此这对它们来说不是问题 显而易见的解决方案/黑客(至少对我来说)是在IE中附加一个dblclick处理程序,它会触发我的点击处理程序两次。另一个想法是使用mousedown/mouseup跟踪自己的点击,它看起来非常原始,可能属于一个框架,而不是我的应用程序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跟踪自己的点击,它看起来非常原始,可能属
那么,最好/通常/正确的处理方法是什么?(首选纯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博士