Это, IMHO, наиболее универсальное и надежное решение (если ваши действия инициируются пользователем, например, «пользователь нажимает кнопку»):
- при первом вызове обработчика проверьте, кто его инициировал:
- если пользователь его задел - делайте свое дело, а затем запускайте его снова (если хотите) - программно
- в противном случае - ничего не делать (= "продолжить по умолчанию")
В качестве примера обратите внимание на это элегантное решение для добавления «Вы уверены?» всплывающее окно для любой кнопки, просто украсив кнопку атрибутом. Мы условно продолжим поведение по умолчанию, если пользователь не откажется.
1. Давайте добавим к каждой кнопке, которую мы хотим, всплывающее окно с предупреждением: «Вы уверены?»:
<button class="btn btn-success-outline float-right" type="submit" ays_text="You will lose any unsaved changes... Do you want to continue?" >Do something dangerous</button>
2. Прикрепите обработчики ко ВСЕМ таким кнопкам:
$('button[ays_text]').click(function (e, from) {
if (from == null) { // user clicked it!
var btn = $(this);
e.preventDefault();
if (confirm() == true) {
btn.trigger('click', ['your-app-name-here-or-anything-that-is-not-null']);
}
}
// otherwise - do nothing, ie continue default
});
Вот и все.