Jquery связать двойной клик и один клик отдельно - PullRequest
90 голосов
/ 13 июня 2011

Есть ли в jquery что-то, что позволило бы мне различать поведение при двойном щелчке и одиночном щелчке?

Когда я связываю оба элемента с одним и тем же элементом, выполняется только один щелчок.

Есть ли способ, который ждет некоторое время перед выполнением одного клика, чтобы увидеть, нажимает ли пользователь снова или нет?

Спасибо :))

Ответы [ 14 ]

0 голосов
/ 27 июня 2014

Это метод, который вы можете сделать, используя базовый JavaScript, который работает для меня:

var v_Result;
function OneClick() {
    v_Result = false;
    window.setTimeout(OneClick_Nei, 500)
    function OneClick_Nei() {
        if (v_Result != false) return;
        alert("single click");
    }
}
function TwoClick() {
    v_Result = true;
    alert("double click");
}
0 голосов
/ 12 марта 2014

То же, что и приведенный выше ответ, но допускает тройной щелчок. (Задержка 500) http://jsfiddle.net/luenwarneke/rV78Y/1/

    var DELAY = 500,
    clicks = 0,
    timer = null;

$(document).ready(function() {
    $("a")
    .on("click", function(e){
        clicks++;  //count clicks
        timer = setTimeout(function() {
        if(clicks === 1) {
           alert('Single Click'); //perform single-click action
        } else if(clicks === 2) {
           alert('Double Click'); //perform single-click action
        } else if(clicks >= 3) {
           alert('Triple Click'); //perform Triple-click action
        }
         clearTimeout(timer);
         clicks = 0;  //after action performed, reset counter
       }, DELAY);
    })
    .on("dblclick", function(e){
        e.preventDefault();  //cancel system double-click event
    });
});
0 голосов
/ 19 июля 2013
(function($){

$.click2 = function (elm, o){
    this.ao = o;
    var DELAY = 700, clicks = 0;
    var timer = null;
    var self = this;

    $(elm).on('click', function(e){
        clicks++;
        if(clicks === 1){
            timer = setTimeout(function(){
                self.ao.click(e);
            }, DELAY);
        } else {
            clearTimeout(timer);
            self.ao.dblclick(e);
        }
    }).on('dblclick', function(e){
        e.preventDefault();
    });

};

$.click2.defaults = { click: function(e){}, dblclick: function(e){} };

$.fn.click2 = function(o){
    o = $.extend({},$.click2.defaults, o);
    this.each(function(){ new $.click2(this, o); });
    return this;
};

})(jQuery);

И, наконец, мы используем как.

$("a").click2({
    click : function(e){
        var cid = $(this).data('cid');
        console.log("Click : "+cid);
    },
    dblclick : function(e){
        var cid = $(this).data('cid');
        console.log("Double Click : "+cid);
    }
});
0 голосов
/ 10 октября 2012

Я внес некоторые изменения в приведенные выше ответы, которые все еще прекрасно работают: http://jsfiddle.net/arondraper/R8cDR/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...