1

我的代码是...

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;(不重定向到 url 或其他onclick()函数)

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

PS:我的链接会在正常点击时正常工作

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


如何在 jQuery 中监听单击并按住?

4

2 回答 2

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

更新了 JSBin

于 2013-02-27T10:43:39.580 回答
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)。

编辑:鉴于您修改后的问题,除了TJ Crowder 的回答之外,我没有什么可提供的。我要说的唯一一件事就是注意全局变量——你可能想把整个事情包装在一个立即调用的函数表达式或类似的东西中。

于 2013-02-27T10:45:52.277 回答