【问题标题】:How can jQuery be used to handle timer in click, dblclick separationjQuery如何在click、dblclick分离中处理定时器
【发布时间】:2009-09-24 15:28:00
【问题描述】:

我在 http://abeautifulsite.net/notebook/58 使用 jQueryFileTree,我想区分 dblclick 和 click 事件,因为点击总是由 dblclick 触发。

谷歌搜索导致了一种技术,其中点击由一个计时器处理,当 dblclick 没有取消它时,计时器就会启动。

有什么方法可以优雅地与 jQuery 和 jQuery 示例一起使用吗?

【问题讨论】:

    标签: jquery timer click double-click


    【解决方案1】:

    您可以使用setTimeout()clearTimeout()来实现定时器功能:

    var timeout;
    var delay = 500;  // Delay in milliseconds
    
    $("...")
        .click(function() {
            timeout = setTimeout(function() {
                // This inner function is called after the delay
                // to handle the 'click-only' event.
                alert('Click');
                timeout = null;
            }, delay)
        }
        .dblclick(function() {
            if (timeout) {
                // Clear the timeout since this is a double-click and we don't want
                // the 'click-only' code to run.
                clearTimeout(timeout);
                timeout = null;
            }
            // Double-click handling code goes here.
            alert('Double-click');
        }
    ;
    

    【讨论】:

    • @vfclists,你可以看我的回答,看看如何将计时器绑定到元素。
    • @Ferdinand Beyer,它不起作用。双击时,Double-Click 警报首先出现,关闭我发现 Click 警报等待关闭...
    • @Cupidvogel:是的,它不起作用。双击由两次单击组成,第二次单击覆盖此处的超时。请注意,这个 sn-p 只是为了传达这个想法,而不是提供一个完整的工作示例!这个网站是关于学习的,而不是收集现成的食谱。
    • 是的,当然。由于我认为这是公认的答案,因此我认为它可能对 OP 有效。所以我只是确认它没有......
    • 不行,dbl点击后触发click事件。
    【解决方案2】:

    jQuery Sparkle 通过实现单击自定义事件为此提供了一个简洁优雅的解决方案。通过这样做,您可以像使用任何其他事件一样使用它,所以:

    $('#el').singleclick(function(){});
    // or event
    $('#el').bind('singleclick', function(){});
    

    它还为一系列点击中的最后一次和首次点击提供自定义事件。而 lastclick 自定义事件实际上将点击量传递回来!所以你可以这样做!

    $('#el').lastclick(function(event,clicks){
        if ( clicks === 3 ) alert('Tripple Click!');
    });
    

    您可以找到合适的演示来展示我刚才所说的内容here 以及用于定义自定义事件的源代码here。它是 AGPL 许可下的开源软件,因此您可以随意获取所需内容,无需担心! :-) 它每天都在积极开发,因此您永远不会缺少支持。

    但最重要的是,它是一个 DRY 插件/效果框架,可让您更轻松地开发插件和扩展。所以我希望这有助于实现这个目标!

    【讨论】:

    【解决方案3】:

    看下面的代码

    $("#clickMe").click(function (e) {
        var $this = $(this);
        if ($this.hasClass('clicked')){
            alert("Double click");
            //here is your code for double click
            return;
        }else{
             $this.addClass('clicked');
            //your code for single click
             setTimeout(function() { 
                     $this.removeClass('clicked'); },500);
        }//end of else
    });
    

    演示在这里http://jsfiddle.net/cB484/

    【讨论】:

      猜你喜欢
      • 2019-05-03
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多