Используя предложение, высказанное Алексеем Лебедевым во втором комментарии, моя текущая реализация теперь выглядит как пример ниже, за исключением того, что я также добавил собственную реализацию локализации для меток кнопок.
Примечания:
- Я сейчас использую виджет диалога jqueryUI
- Обратите внимание на использование .delegate, так что обработчик «осведомлен о ajax», то есть работает с элементами, добавленными в DOM после загрузки страницы, например, в результате вызова AJAX
- Использует флаг, чтобы предотвратить рекурсию, когда пользователь нажимает Да в диалоговом окне подтверждения.
- Использует jquery 1.6.4 и jquery-ui-1.8.16
Если кто-то может предложить улучшения, пожалуйста, включите.
<!-- Examples of usage -->
<input type='submit' data-confirm="OK to delete customer 123?" ... />
<a href="..." data-confirm="OK to navigate?" ... />
<!-- Implementation -->
<script type="text/javascript">
var confirmClickHandler = function (event) {
if ($(event.currentTarget).data('isConfirming')) return;
var message = event.currentTarget.attributes['data-confirm'].value;
event.preventDefault();
$('<div></div>')
.html(message)
.dialog({
title: "Confirm",
buttons: {
"Yes": function () {
$(this).dialog("close");
$(event.currentTarget).data('isConfirming', true);
event.currentTarget.click();
$(event.currentTarget).data('isConfirming', null);
},
"No": function () {
$(this).dialog("close");
}
},
modal: true,
resizable: false,
closeOnEscape: true
});
};
$(document).ready(function () {
$("body").delegate("[data-confirm]", "click", confirmClickHandler);
});
</script>