在mousdown down延迟之后防止链接事件

jas*_*328 0 javascript jquery

我正在开发一个函数,以便当用户单击并保留链接时,该链接不会将用户发送到相应的链接.但是,我使用的功能不起作用.我想要的是用户点击一个链接,如果他们按住它超过一秒钟,该链接将不再有效,并且不会触发任何事件.经过一段时间的浏览,我找不到代码的错误.所以我的问题是,我做错了什么?http://jsfiddle.net/rQP6g/2/

<a href="www.google.com" >link</a>

<script>
var timeoutId = 0;
    $('a').mouseup(function() {
    timeoutId = setTimeout(function(e) {  
    e.preventDefault();
e.stopPropagation();
}, 1000);
}).bind('mouseup', function() {
clearTimeout(timeoutId);
});
</script>
Run Code Online (Sandbox Code Playgroud)

Las*_*sen 6

这应该工作:http://jsfiddle.net/rQP6g/18/

JS看起来如下:

var mousedownTime;

$('a').mousedown(function(e) {
    mousedownTime = new Date();
}).click(function(e) {
    // If the mouse has been hold down for more than 1000 milliseconds ( 1 sec. ), cancel the click
    if(Math.abs(new Date() - mousedownTime) > 1000)
        e.preventDefault();
});?
Run Code Online (Sandbox Code Playgroud)

基本思路是捕获按下鼠标按钮的时间 - 然后,当释放时,触发click事件并在超过1秒时计算它.自链接被按下以来已经过去了.如果是这种情况,则取消click事件并且不会加载链接:)

  • @MattWhipple你能详细说明吗? (2认同)