2015-08-05 4 views
1

У меня есть приложение, которое обрабатывает много событий jQuery, и мне нужен способ отличить простые клики от выбора текста.jQuery: временно отключить прослушиватель кликов

Я хотел бы отключить все события щелчка, когда обнаруживаю выбор текста. Это возможно? Я подумал о том, чтобы сделать это вот так:

// User presses mouse button 
$(window).on('mousedown', function(){ 

    // User moves mouse while pressing mouse button => selection 
    this.one('mousemove', function(){ 

     // Disable click listener temporarily 
     $.fn.click = null; 

    // User releases mouse button => end of selection 
    }).on('mouseup', function(){ 

     // Stop mousemove event & restore click listener 
     this.off('mousemove'); 
     $.fn.click = function(){}; 
    }); 
}); 

Код, очевидно, не будет работать, но служит для иллюстрации моей цели. Кто-нибудь знает о хорошем способе достижения этого?

+0

Почему вы хотите сделать отключить клик слушателя? Если это так, используйте 'event.preventDefault()' – Mouser

+0

Поскольку событие click будет срабатывать независимо от намерения пользователя, что может быть простым выбором текста. – notyourtype

+0

Почему в первую очередь возникает событие щелчка? – Mouser

ответ

1

Что-то простое, как установка флага, будет работать для вашего примера.

Все, что вам нужно сделать, это определить, когда включать или отключать флаг.

0

Просто используйте флаг, как это:

var flag = 0; 
// User presses mouse button 
$(window).on('mousedown', function(){ 
    if (flag == 0) { 
     // do some if click event enabled 
    } 
    // User moves mouse while pressing mouse button => selection 
    this.one('mousemove', function(){ 
     // Disable click listener temporarily 
     // $.fn.click = null; 
     flag=1; 
     // User releases mouse button => end of selection 
    }).on('mouseup', function(){ 
     // Stop mousemove event & restore click listener 
     // this.off('mousemove'); 
     // $.fn.click = function(){}; 
     flag = 0; 
    }); 
});