35

我怎么知道在我的触发代码中preventDefault被调用了?

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

5 回答 5

48

trigger() 也可以接受一个事件对象,所以如果你可以创建一个事件对象,像这样:

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

然后您可以在触发器之后检查是否已像这样调用 preventDefault() :

var prevented = event.isDefaultPrevented();
于 2010-02-09T14:26:20.547 回答
1

如果您询问如何确定是否已阻止默认设置,请使用:

event.isDefaultPrevented()

这将根据是否调用 preventDefault() 返回“true”或“false”。

编辑: http ://api.jquery.com/event.isDefaultPrevented/

于 2010-02-09T14:23:25.200 回答
1

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

另一方面,如果您想停止此事件对其他人的冒泡效果,请查看triggerHandler哪个不会冒泡到层次结构..

于 2010-02-09T14:26:54.047 回答
1

万一有人需要它,就像我一样。重要的第二个构造函数参数:

纯JS:

var event = new CustomEvent("close", { "cancelable": true });
// now event listeners can prevent default behavior
element.onclose(event);
// or: element.dispatchEvent(event);

if (!event.defaultPrevented)
    defaultBehavior();
于 2019-11-05T10:33:42.790 回答
0

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

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

[编辑] 哦,您可以尝试让处理程序将对事件对象的引用存储在外部代码可以找到的某个地方,然后使用“isDefaultPrevented()”进行外部检查。我不知道这是否可行。

于 2010-02-09T14:19:07.657 回答