【问题标题】:Stop event propagation in Meteor在 Meteor 中停止事件传播
【发布时间】:2012-05-02 04:34:22
【问题描述】:

我已经使用 Meteor 的 event maps 连接了一些基本的 click 事件。

如何阻止事件在处理后传播?

Meteor 的文档state

现在,事件处理程序与 jQuery 连接起来,并且事件 您收到的对象是一个 jQuery 事件对象。

但是,return falsee.stopPropagation() 似乎都不起作用。

【问题讨论】:

  • 我遇到了很多麻烦,这就是我现在切换回 jQuery 事件的原因。我认为这可能是一个错误,但我不确定我没有时间调试。我建议做同样的事情或尝试调试。
  • 是的,我的后备方法是使用 jQuery 事件处理程序,然后在处理程序中使用 $('#foo').trigger('bar') 挂钩到流星事件映射。

标签: events meteor


【解决方案1】:

目前,stopPropagation 在有限的情况下工作。为了在两个处理程序之间停止传播,必须在不同的模板上指定处理程序,并且在内部和外部模板之间必须有一个介入的 DOM 节点容器。目前正在开发修复程序,并将在即将发布的版本中发布。

您能否发布您的代码要点,以便我确保您的特殊情况得到解决?

作为一种解决方法,您可以尝试 e.stopImmediatePropagation(),它由 jQuery 提供并且应该阻止任何其他处理程序运行。

【讨论】:

  • 感谢您的信息。在我的代码中,我有<a href="#" id="show">show</a>。我希望能够处理#show 上的点击事件,然后阻止href url 被跟踪。 (此时点击处理后,url栏中会出现#。)
  • @dgreensp - 这是在文档中提到的一个错误,我原以为它可能已被修复,因为它已被删除。我建议在此修复到位之前将其重新添加。我个人认为对错误持开放态度会提供更值得信赖的环境。
  • 啊哈,你想要e.preventDefault()! @jonathanKingston,这些错误已在 0.3.5 中修复。
  • "并且在内部和外部模板之间必须有一个介入的 DOM 节点容器。" - 我认为这是错误之一,不是吗?
  • 我明白了。解决方法类似。不过,在此之前,事件处理程序根本不会被绑定,或者不会被反弹,并且这些错误已得到修复。几乎没有理由再使用包装器 DIV。我提出了一个案例,结果证明是假设的,您有两个处理程序,并且希望一个处理程序防止冒泡到另一个处理程序。抱歉,活动问题;我会把这个缝起来!
【解决方案2】:

我自己研究这个问题时遇到了这个问题。 Blaze Event Maps 的文档是 here

对于流星中的这个问题,您需要根据需要考虑 2 个函数:

stopPropagation()

防止事件传播(冒泡)到其他元素。在此事件映射和其他事件映射中,匹配相同元素的其他事件处理程序仍会被触发。

stopImmediatePropagation()

防止在此事件上运行所有其他事件处理程序,包括此事件映射中的其他处理程序、冒泡到达的处理程序以及其他事件映射中的处理程序。

我想要的是停止冒泡并停止传播到其他 Meteor 事件处理程序。所以event.stopImmediatePropagation() 成功了,这并不是上面建议的真正解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2012-10-10
    • 2011-04-06
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多