Когда пользователь нажимает на определенную ссылку, я хотел бы представить им диалоговое окно подтверждения. Если они нажмут «Да», я хотел бы продолжить исходную навигацию. Одна загвоздка: мой диалог подтверждения реализуется путем возврата объекта jQuery.Deferred, который разрешается только тогда, когда/если пользователь нажимает кнопку «Да». Таким образом, в основном диалоговое окно подтверждения является асинхронным.
Итак, в основном я хочу что-то вроде этого:
$('a.my-link').click(function(e) {
e.preventDefault(); e.stopPropogation();
MyApp.confirm("Are you sure you want to navigate away?")
.done(function() {
//continue propogation of e
})
})
Конечно, я мог бы установить флаг и повторно нажать триггер, но это чертовски грязно. Любой естественный способ сделать это?
$this.trigger(e);
(редактировать, для этого потребуется флаг, если он сработает) или$this.parent().trigger(e)
(в обратном вызове), где$this
относится к элементам, на которые нажали? - person Felix Kling   schedule 18.10.2011e.preventDefault(); e.stopPropogation();
отправил флаги на e. Если бы был какой-то способ скопировать e в e2, то я мог бы вызвать что-то вродеe.handler(e2)
, что, я думаю, сработает. - person George Mauer   schedule 18.10.2011trigger
... - person Felix Kling   schedule 18.10.2011.parent()
с использованием исходного объекта события, и, похоже, оно работает нормально. jsfiddle.net/vTzDM Интересно, почему это не сработало для Джорджа. - person user113716   schedule 19.10.2011.trigger(e)
(не работает). В вашем случае объект события просто передается в качестве параметра обработчику события, но его свойства не используются для нового объекта события, поэтому его передача не требуется. Я не знаю, нужно ли это ОП или нет..parent().click()
кажется хорошей альтернативой, но это зависит от того, что делают другие обработчики событий в иерархии. Спасибо за попытку :) - person Felix Kling   schedule 19.10.2011.parent().click()
будет самым простым. - person user113716   schedule 19.10.2011