Мне нужно иметь возможность цепочки событий кликов и временно приостанавливать распространение событий между ними.
Итак, для данного элемента он запускает три разных события кликов, а второй требует ввода пользователя, поэтому он приостанавливает распространение, пока пользователь заполняет форму, а затем продолжает.
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, но решение не нужно полагаться на него.
Есть аналогичный вопрос, но ни один из ответов не является удовлетворительным: Как продолжить распространение событий после отмены?.
Edit:
Мне нужен более чистый способ вызвать e.stopImmediatePropagation()
, а затем продолжить с этой точки. На данный момент лучшим вариантом является ручной ввод "частных" данных jQuery [1] и вызов функций вручную.
-
$._data( $(element)[0], 'events' ).click[].handler()