jQuery:暂时禁用单击侦听器

时间:2015-08-05 13:26:28

标签: javascript 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(){};
    }); 
});

代码显然不会起作用,但有助于说明我的目标。有谁知道实现这个目标的好方法?

2 个答案:

答案 0 :(得分:1)

设置标志之类的简单操作适用于您的示例。

var flag = true;
...
if(flag === true)
{
   --Click listener enabled code here--
}
else
{
   --Click listener disabled code here--
}

您所要做的就是确定何时启用或禁用该标志。

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