返回false;鼠标在x秒内按住(单击)

时间:2013-02-27 10:41:34

标签: jquery click mousedown

我的代码是......

var timer;
var func = function () {
        $("body").append("1");
};

$(document).on('mousedown' , 'a' , function(e){
        timer = setTimeout(func, 1000);
}).on('mouseup mouseleave' , 'a' , function(e){
        clearTimeout(timer);
});

一切正常。但是当我将此功能设置为<a href="http://google.com">text</a>

之类的链接时

我需要设置return false;(不重定向到网址或其他onclick()个功能)

我可以在哪里设置return false;?还是另一种解决方案?

PS:点击正常点击

,我的链接将正常工作

游乐场: http://jsbin.com/iwilop/1/edit


How can I listen for a click-and-hold in jQuery?

2 个答案:

答案 0 :(得分:2)

您需要添加click处理程序,如果调用了func,则会阻止点击的默认操作。在这里,我使用timer作为标志:

var timer = 0;
var func = function () {
  $("body").append("1");
  timer = 0;
};

$(document).on('mousedown' , 'a' , function(e){
  timer = setTimeout(func, 1000);
}).on('mouseup mouseleave' , 'a' , function(e){
  if (timer) {
    clearTimeout(timer);
  }
}).on('click', 'a', function() {
  if (!timer) {
    return false;
  }
});

Updated JSBin

答案 1 :(得分:0)

你需要一个click处理程序(除非还有其他处理程序可以触发,否则你实际上不需要调用return false):

$(document).on('mousedown' , 'a' , function(e){
        timer = setTimeout(func, 1000);
}).on('mouseup mouseleave' , 'a' , function(e){
        clearTimeout(timer);
}).on('click', 'a', function(e) {
        return false;
});

请注意,以上操作会影响页面上的所有链接 - 您可能需要使a选择器符合更具体的要求(例如a.blah)。

编辑:根据您修改后的问题,除T.J. Crowder's answer以外,我无法提供任何优惠。我唯一要说的是注意全局变量 - 你可能希望用immediately invoked function expression或类似的方式包装整个事物。