Javascript暂停事件传播

Aar*_*run 15 javascript jquery events

我需要能够链接点击事件,并暂时暂停它们之间的事件传播.

因此,对于给定元素,它运行三个不同的单击事件,但第二个需要用户输入,因此当用户填写表单然后继续时,它会暂停传播.

clickAction2 = ->
  #Pause event propagation
  somehow.pauseEventPropegationRightHere()

  #Go and handle the dialogs, user input, JS requests
  goDoSomething().thenDoCallback( ->
     #User is now authenticated completely.
     somehow.continueEventPropegationAsIfNothingHappened()
  )
Run Code Online (Sandbox Code Playgroud)

为了允许单一责任,链接更高/更低的事件不应该知道事件传播被暂停并且不应该被调用两次.

不,不能从另一个函数或任何类似的原始解决方案顺序调用三个单击事件.

这与AngularJS指令有关,但解决方案不需要依赖它.

有一个类似的问题,但没有一个答案是令人满意的:如何在取消后继续事件传播?.

编辑:

我需要的是一种更清洁的呼叫方式e.stopImmediatePropagation(),然后从那一点继续.截至目前,我最好的选择是手动输入jQuery"私有"数据[1]并手动调用函数.

  1. $._data( $(element)[0], 'events' ).click[].handler()

pst*_*trm 0

尝试类似的东西

elem.on('event',function(e) {
    e.stopPropagation();

    goDoSomething(function(){
        elem.parent().trigger(e);
    });
});
Run Code Online (Sandbox Code Playgroud)

goDoSomething()可以执行 AJAX 调用或其他异步操作,然后出于任何原因调用回调以使事件传播继续