【发布时间】:2014-05-19 07:16:54
【问题描述】:
我需要能够链接点击事件,并暂时暂停它们之间的事件传播。
因此,对于给定的元素,它会运行三个不同的点击事件,但第二个需要用户输入,因此它会在用户填写表单时暂停传播,然后继续。
clickAction2 = ->
#Pause event propagation
somehow.pauseEventPropegationRightHere()
#Go and handle the dialogs, user input, JS requests
goDoSomething().thenDoCallback( ->
#User is now authenticated completely.
somehow.continueEventPropegationAsIfNothingHappened()
)
为了允许单一职责,并且链接更高/更低的事件不应该知道事件传播已暂停,并且不应调用两次。
不行,这三个点击事件不能从另一个函数或任何类似的原始解决方案中依次调用。
这与AngularJS指令有关,但解决方案不需要依赖它。
有一个类似的问题,但没有一个令人满意的答案:How to continue event propagation after cancelling?。
编辑:
我需要的是一种更简洁的方式来调用e.stopImmediatePropagation(),然后从那一点继续。截至目前,我最好的选择是手动输入 jQuery“私有”数据[1] 并手动调用函数。
$._data( $(element)[0], 'events' ).click[].handler()
【问题讨论】:
-
你能保证你绑定的导致延迟的特殊事件是第一个绑定的点击事件吗?使气泡在同一元素上的事件列表中间停止的地方拾取比简单地使用特殊标志使当前元素上的所有事件再次发生以阻止该特殊事件被处理要困难得多时间。
-
没有。它可能是第二个。
-
@Howlin,不,这个问题是 4 个月前提出的,这是在单个元素上暂停和继续事件,不会阻止冒泡到父元素。
标签: javascript jquery events