clearTimeout不起作用

时间:2011-07-01 14:29:29

标签: javascript

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
     });

为单击和双击事件注册元素。要在双击时取消单击事件,setTimeout函数已注册。我在双击方法中获取Ineger计时器ID,但clearTimeout不取消要执行的函数。我没有收到错误。提前谢谢。

1 个答案:

答案 0 :(得分:6)

无法区分点击和双击,因此每次双击会触发两个单独的点击事件。每个那些点击事件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/