SetTimeout对以下代码不起作用:
$("#clkDblClk").click(function(){
var clickTimer=setTimeout(function(){
//Some code to execute
},1000);
$(this).data("clickTimer",clickTimer);
});
$("#clkDblClk").dblclick(function(){
var clickTimer=$(this).data("clickTimer");
clearTimeout(clickTimer);
//Some ajaxRequest
});在doubleclick上为click和doubleclick上的cancel out click事件注册元素,注册setTimeout函数。我在双击方法中获得Ineger计时器id,但clearTimeout没有取消要执行的函数。我不明白这个错误。提前谢谢。
发布于 2011-07-01 22:32:40
没有办法区分单击和双击,所以每次双击也会触发两个单独的单击事件。每个单击事件也会启动setTimeout,但它会覆盖.data('clickTimer')值。
这就是证据:http://jsfiddle.net/mattball/Az6zY/
一种解决方案是解除click事件。非常简单的实现:
var DATA_KEY = 'clickTimer';
$('#clkDblClk').click(function()
{
var $this = $(this);
if ($this.data(DATA_KEY)) return;
var clickTimer = setTimeout(function()
{
// do other stuff
$this.removeData(DATA_KEY);
}, 1000);
$this.data(DATA_KEY, clickTimer);
})
.dblclick(function()
{
var $this = $(this);
var clickTimer = $this.data(DATA_KEY);
clearTimeout(clickTimer);
$this.removeData(DATA_KEY);
});演示:http://jsfiddle.net/mattball/B5MSw/
https://stackoverflow.com/questions/6549298
复制相似问题