在jQuery/JavaScript中,有没有一种方法可以将所有双击事件绑定到它们的单次单击等价物?
我有一些jQuery,有很多不同的点击事件。我的一些用户习惯于双击,因为我没有双击事件绑定,所以会触发两次单击事件;这可能是一种痛苦——例如,如果一次点击打开某个东西,另一次点击关闭它,双击就是一个零和游戏在jQuery/JavaScript中,有没有一种方法可以将所有双击事件绑定到它们的单次单击等价物?,javascript,jquery,events,Javascript,Jquery,Events,我有一些jQuery,有很多不同的点击事件。我的一些用户习惯于双击,因为我没有双击事件绑定,所以会触发两次单击事件;这可能是一种痛苦——例如,如果一次点击打开某个东西,另一次点击关闭它,双击就是一个零和游戏 是否有任何方法可以将所有双击事件绑定到它们的单次单击等价物,而无需单独编写代码?我认为将dblclick映射到click不会有帮助;我想这会让事情变得更糟 你说过你用授权来联系你的活动。您可以为自己提供一个函数,用于取消对事件处理程序的调用: //非常简单的去抖动,接受第一个事件并忽略 /
是否有任何方法可以将所有双击事件绑定到它们的单次单击等价物,而无需单独编写代码?我认为将dblclick映射到click不会有帮助;我想这会让事情变得更糟 你说过你用授权来联系你的活动。您可以为自己提供一个函数,用于取消对事件处理程序的调用:
//非常简单的去抖动,接受第一个事件并忽略
//一段时间内的后续事件
函数去BouncedHandler(handler,delay){
delay=delay | | 300;//我听说Windows使用500毫秒,但这似乎太长了
var last;
返回函数(){
var now=Date.now();
如果(上次和上次+延迟>现在){
返回false;
}
最后=现在;
返回处理程序.apply(这个,参数);
};
}
$(文档)。在(“单击”、“输入[type=button]”上,取消BouncedHandler(函数(){
$(“.container”).toggleClass(“切换打开切换关闭”);
}));代码>
。切换打开。关闭{
显示:无;
}
.切换开关关闭。打开{
显示:无;
}
打开
关闭
我会这样做:
<input type="hidden" id='counter' value='0'>
<input type="button" value="Save" onclick="save()">
function save(){
var counter = parseInt(document.getElementById("counter").value);
counter = counter+1;
if(counter == 1){
console.log('Saving...')
}
document.getElementById("counter").value = counter;
//after 3 seconds set counter back to 0
setTimeout(function(){
document.getElementById("counter").value = 0;
}, 3000)
}
函数save(){
var counter=parseInt(document.getElementById(“counter”).value);
计数器=计数器+1;
如果(计数器==1){
console.log('Saving…'))
}
document.getElementById(“计数器”).value=计数器;
//3秒钟后,将计数器设置回0
setTimeout(函数(){
document.getElementById(“计数器”).value=0;
}, 3000)
}
HTML
<button class="btn">
click me
</button>
请查收
防止点击处理程序5秒(您可以根据需要设置时间)
检查控制台以查看结果您已经说过,我现在删除的答案($(document).on(“dblclick”,false);
)适用于您,尽管我意识到(并且jcubic确认)它完全错了。你说“也许这是因为我绑定事件的方式而起作用?$(文档)。在(“单击“,”likePost“,”函数(事件){”上,我认为这一定是观察错误。@T.J.Crowder-是的,你是对的(因为你错了)。如果我双击的速度足够快的话,这是另一个让它看起来可以工作的原因-稍微慢一点的dbl单击(但速度仍然足够快,可以注册为dblclick)会出现同样的问题。我想知道所有单击事件的超时是否可以完成这项工作?(第一次单击更改了更改事件的类,如果我双击的速度足够快,我仍在点击第一个事件)。也许可以使用settimeout在一定时间内阻止单击
$(document).ready(function(){
var clickDisabled = false;
$('.btn').click(function(){
if (clickDisabled)
return;
// do your real click processing here
console.log('hi');
clickDisabled = true;
setTimeout(function(){clickDisabled = false;}, 5000);
});
});