无论点击速度和浏览器如何,每次点击按钮时,完全执行一次功能的最佳方法是什么?
简单地绑定“click”处理程序在除IE之外的所有浏览器中都能正常工作。
在IE中,当用户点击太快时,只会触发“dblclick”,因此永远不会执行“click”处理程序。其他浏览器触发这两个事件,因此对他们来说不是问题。
明显的解决方案/ hack(至少对我来说)是在IE中附加一个dblclick处理程序,它会触发我的点击处理程序两次。另一个想法是使用mousedown / mouseup跟踪自己的点击次数,这看起来很原始,可能属于框架而不是我的应用程序。
那么,处理这个问题的最佳/通常/正确方法是什么? (纯javascript或jQuery首选)
答案 0 :(得分:1)
根据您的情况,您可以使用不同的方法,但我建议使用带有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();
});
我不确定这会按你想要的方式运作,但我认为这是一个开始。
答案 1 :(得分:1)
Mousedown和mouseup就像点击功能一样,不幸的是当IE因为双击而省略了点击时它也会省略mousedown和mouseup。在任何情况下,您都可以将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
}
}
我顺便发现,至少在Firefox中,dblclick事件没有给出事件时间,因此我必须解析为Date方法。