2011-04-10 74 views
3

我正在jQuery中製作一個腳本,並且我有許多點擊鏈接點擊事件。事情是,我不希望我點擊事件的鏈接做除事件以外的任何事情,所以我在所有點擊事件的開始處放置了e.preventDefault();。但是我有很多點擊事件,那麼有沒有更簡單的方法來將e.preventDefault();添加到所有鏈接點擊事件?請記住我也有一些我想要的鏈接,因爲他們應該這樣做,所以將e.preventDefault();添加到所有鏈接將不起作用,我只想將它添加到點擊事件的鏈接中。jQuery - 添加e.preventDefault()到所有鏈接點擊事件?

+0

有沒有什麼辦法來定義,通過一個類名或如此,集團要保持其正常功能'了'元素? – 2011-04-10 18:17:20

回答

3

在任何綁定代碼運行之前,您可以嘗試重寫綁定方法或單擊方法。在這裏,我用相當難以理解的方式覆蓋了點擊方法。我真的建議只在需要的時候調用preventDefault。

(function(){ 
    var original = jQuery.fn.click; 
    jQuery.fn.click = function(){ 
     // wrap your function in another function 
     var f = arguments[0]; 
     arguments[0] = function(e) { 
      e.preventDefault(); 
      f(e); 
     } 
     original.apply(this, arguments); 
    } 
})(); 

例子在行動:http://jsfiddle.net/k4jzb/

+2

男人,我希望我沒有寫過。它看起來感覺有點髒。 – Nick 2011-04-10 19:31:58

+0

不,這看起來正是我想要的,謝謝! – Cokegod 2011-04-16 13:06:53

5

你可以使用jQuery命名空間的事件

http://docs.jquery.com/Namespaced_Events

HTH

,你可以爲你想添加一個click事件,但阻止默認行爲的鏈接做這樣的事

$('a.someClass').bind('click.dontClick',function(e){ 

e.preventDefault(); 

}); 

和您想要的正常點擊行爲的鏈接

$('a.clickClass').bind('click.doClick',function(e){ 

//your event handling code here 

}); 

DEMO

+0

是的,但那樣我需要給每個鏈接添加一個類,而且我也不想那樣...我想要e.preventDefault();在每個鏈接點擊事件開始時自動添加。 – Cokegod 2011-04-10 19:08:48

0

This SO answer細節如何檢測一個元素上的事件,但它看起來像提問者把選擇根據自己的事件監聽器元素的答案,built a jQuery plugin

所以,你可以使用該插件,然後使用一些事件委託像這樣:

$(document).delegate('a:Event(click)', 'click', function (e) { e.preventDefault(); }); 

警告:我從來沒有用過這個插件自己,我真的不熟悉jQuery的自定義CSS濾鏡,所以這可能不實際工作。完全一樣。

0

我想借此@ 3nigma的回答遠一點。通常,您不希望執行默認操作的鏈接類似<a href="#">

因此,請過濾掉這些鏈接,以免頁面在點擊時跳轉。我使用jQuerys filter()函數。不知道這是否是最好的。你怎麼看?

$('a').filter(function(i) { 
return $(this).attr("href") === "#"; 
}) 
.bind('click.dontClick',function(e){ 
e.preventDefault(); 
}) 

這裏舉例:Filter a tags containing #