Вы хотите изменить конфигурацию диалога при щелчке (в этом случае поведение кнопки «ОК»). Для этого у вас много решений, все они уродливые (imo). Я бы посоветовал генерируя диалог на лету, и уничтожить его, как только он был использован, что-то вроде этого:
$("#delete").click(function(ev) {
ev.preventDefault(); // preventDefault should suffice, no return false
var href = $(this).attr("href");
var dialog = $("<div>Are you sure?</div>");
$(dialog).dialog({
resizable: false,
autoOpen: true,
modal: true,
buttons: {
'OK': function() {
window.location = href;
$(this).dialog("close");
},
'Cancel': function() {
$(this).dialog("close");
}
},
close: {
$(this).remove();
}
});
});
Или еще лучше, инкапсулировать диалоговое окно подтверждения в функцию, так что вы можете использовать его, например, так :
function confirmDialog(msg) {
var dialog = $("<div>"+msg+"</div>");
var def = $.Deferred();
$(dialog).dialog({
resizable: false,
autoOpen: true,
modal: true,
buttons: {
'OK': function() {
def.resolve();
$(this).dialog("close");
},
'Cancel': function() {
def.reject();
$(this).dialog("close");
}
},
close: {
$(this).remove();
}
});
return def.promise();
}
И затем использовать его как так
confirmDialog("are your sure?").done(function() {
window.location = $(this).attr("href");
}).fail(function() {
// cry a little
});
вы, возможно, придется проверить, если отложенный объект был отклонен или разрешен, прежде чем закрыть диалоговое окно, чтобы обеспечить подтверждени г выбрасывается при закрытии (а не только при нажатии кнопки «Отмена»). Это можно сделать с условием def.state() === «ожидающий».
Для получения дополнительной информации о JQuery отсроченного: http://api.jquery.com/category/deferred-object/
близко: {$ (это) .remove();} возвращает ошибку – Vlado