2013-02-27 60 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

相關問題