2

我有一個庫函數,我無法更改,它使用MooTools來附加事件。用jQuery.click覆蓋MooTools事件()

$(document.body).addEvents({ 
    "mousedown:relay(a.className)": function (a, b) { 
     if (!a.rightClick) { 
      //do something 
     } 
     return false 
}); 

我不是太熟悉MooTools的,但我已經試過所有我能想到的與jQuery.click()事件來覆蓋它。

我試着把一個聽衆連接到.className,它的父母(幾個級別),甚至整個body;每次我在我的click事件中使用function (e) { e.preventDefault() }

我一直認爲preventDefault()將始終阻止與新觸發事件相關的所有默認事件。

任何人都可以啓發我爲什麼我的事件覆蓋不起作用?

//編輯

我不希望使用MooTools的,因爲我們將在未來很可能端口一切的jQuery(或至少不MooTools的)。不過,如果沒有別的辦法,我想我必須這樣做。

// EDIT 2

我試過jQuery.off()幾種不同的方式,包括 $j('body').off('click mousedown','.className');,它仍然無法刪除MooTools的事件。

//編輯3

我決定這是最好還是不惹MooTools的;我已經更改了類名,所以MooTools沒有做任何事情,只是複製了上面代碼的//do something部分中發生的事情。

我有一種感覺,因爲MooTools事件監聽器末尾的return false,我無法對click事件做任何事情。

+0

出於好奇,爲什麼你要重寫事件?如果你已經有一個點擊事件,爲什麼你不能在那裏處理額外的邏輯? – 2013-03-14 15:21:46

+0

我無法添加或更改庫(使用MooTools的代碼),如果存在一些新條件,我只需要讓它運行。 – 2013-03-14 15:22:52

+0

如果你想阻止代碼運行,你不能簡單地[刪除事件](http://mootools.net/docs/core/Element/Element.Event#Element:removeEvents)? – mgibsonbr 2013-03-14 15:23:49

回答

1

根據您使用的JQuery版本,您可以嘗試使用off(JQuery 1.7或更高版本)或unbind刪除MooTools事件處理程序。

我不確定他們是如何在幕後工作的,但我認爲他們將刪除事件處理程序,而不管它們如何綁定事件。然後,您可以使用JQuery來應用您自己的事件處理程序。

http://api.jquery.com/off/

http://api.jquery.com/unbind/

+0

我剛剛嘗試過這兩種方法,但都無效。我會嘗試更多的事情並相應地更新。 – 2013-03-14 15:35:25

+0

用我試過的東西之一更新了原始問題。 – 2013-03-14 15:40:59

+0

@charlieg是否確定在運行'off'後事件沒有被綁定。確切地測試這些方法的一種方法是,在執行完所有操作後,在控制檯中運行「關閉」。 – marteljn 2013-03-14 15:59:32