2013-02-27 65 views
1

我的代码...返回false;当鼠标保持(点击)在x秒

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


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

回答

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

+0

例如在我的'func'函数? – l2aelba 2013-02-27 10:44:51

+0

不会在'mousup'中返回false吗? – Christoph 2013-02-27 10:45:15

+0

@ l2aelba:不,你正试图阻止点击,对吧?所以在链接上阻止它。 – 2013-02-27 10:45:35

0

你需要一个click处理器(你实际上并不需要打电话,除非有其他的处理程序返回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或类似的东西中。

+0

编辑我的问题:'PS:我的链接在正常点击点击时会正常工作' – l2aelba 2013-02-27 10:48:13

相关问题