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