2010-02-09 56 views
33

如何在我的触发代码中知道preventDefault已被调用?jQuery:如何将event.preventDefault()与自定义事件一起使用?

$(document).trigger('customEvent', params); 
if (/* ??? */) 
    doDefaultActions(); 
+1

,如果它是一个自定义事件..有应该不是默认操作。 – 2010-02-09 14:20:58

+1

如果处理程序也用于非自定义事件,它仍然可以用于事件机制。 – 2010-02-09 15:02:29

+0

如果你的自定义事件真的是自定义的,那么你想要防止什么?通常使用preventDefault,以便浏览器不会执行正常的操作。浏览器本身不知道或关心自定义事件。 – 2010-02-09 14:20:10

回答

45

触发()也可以采取一个事件对象,因此,如果您可以创建一个事件对象,像这样:

var event = jQuery.Event("customEvent"); 
$(document).trigger(event); 

,那么你可以检查后触发看如果preventDefault()被如此调用:

var prevented = event.isDefaultPrevented(); 
+0

哇,这很酷。每天学点东西! – Pointy 2010-02-09 14:34:52

+3

是的,我今天通过查看jQuery API了解到了它。所以我们都学习今天! – 2010-02-09 14:39:19

+0

这似乎没有记录(至少在api.jquery.com) - 我无法找到它。文档现在好一点了,但我仍然希望他们能成为一个wiki。 [编辑:好吧,我现在看到它的来源!!] – Pointy 2010-02-09 14:44:32

0

据我所知,“的preventDefault()”调用有关防止本机浏览器响应之类的文本字段中的锚标记上或按键点击。一旦事件处理周期结束,它就结束了。对于弥补事件,我认为它没有任何影响,因为它全部关于jQuery事件处理系统,而不是关于本地浏览器功能。

您的代码可能会在某处设置某种标志以便与“外部世界”进行通信。

ooh你可以尝试让处理程序在事件对象的某个地方隐藏一个引用,让外部代码可以找到它,然后在外部检查“isDefaultPrevented()”。但我不知道这是否可行。

1

自定义事件没有发生某些默认操作(它们是自定义的)。

在另一方面,如果你想停止这个事件给他人的冒泡效果,然后看看triggerHandler不冒泡的层次..

相关问题