【问题标题】:jQuery: How do I use event.preventDefault() with custom events?jQuery:如何将 event.preventDefault() 与自定义事件一起使用?
【发布时间】:2010-02-09 14:14:23
【问题描述】:

如何在我的触发代码中知道preventDefault 已被调用?

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

【问题讨论】:

  • 如果您的自定义事件真的是自定义的,那么您要防止什么?通常使用 preventDefault 是为了让浏览器不会做正常的事情。浏览器本身不知道也不关心自定义事件。
  • 如果是自定义事件..应该没有默认动作..
  • 它可能有用的一个原因是当您将处理程序绑定到真实事件和自定义事件时。当您需要从(例如)复选框的初始状态初始化系统时,这很好。您不想触发“点击”处理程序,因为您不希望复选框切换。因此,他可能想知道在这种过程中是否有某些东西决定取消复选框切换。 (处理程序不一定会检查事件名称。)
  • 如果处理程序也用于非自定义事件,您仍然可以在事件机制中使用它。

标签: jquery custom-events


【解决方案1】:

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

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

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

var prevented = event.isDefaultPrevented();

【讨论】:

  • 是的,我今天通过在 jQuery API 上查找它自己学会了它。所以我们今天都在学习!
  • 这似乎没有记录(至少在 api.jquery.com 上) - 反正我找不到它。文档现在稍微好一点,但我仍然希望他们能把它变成一个 wiki。 [编辑:好的,我现在在源代码中看到它!]
  • api.jquery.com/trigger 并查看第一条评论。 “记录在案”在这里可能不是正确的词,但它确实存在。
【解决方案2】:

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

event.isDefaultPrevented()

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      纯 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();
      

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-01-08
          • 1970-01-01
          • 2023-04-10
          • 1970-01-01
          • 1970-01-01
          • 2017-11-09
          • 2021-05-25
          相关资源
          最近更新 更多