Bạn muốn thay đổi cấu hình của hộp thoại khi nhấp (trong trường hợp này, hành vi của nút Ok). Cho rằng bạn có nhiều giải pháp tất cả chúng xấu xí (imo). Tôi sẽ tư vấn tạo ra một hộp thoại khi đang bay, và phá hủy nó một khi nó đã được sử dụng, một cái gì đó như thế này:
$("#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();
}
});
});
Hoặc thậm chí tốt hơn, đóng gói hộp thoại xác nhận vào một chức năng để bạn có thể tái sử dụng nó, như vậy :
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();
}
Và sau đó sử dụng nó như vậy
confirmDialog("are your sure?").done(function() {
window.location = $(this).attr("href");
}).fail(function() {
// cry a little
});
bạn có thể phải kiểm tra xem các đối tượng thu nhập hoãn lại đã bị từ chối hoặc giải quyết trước khi bạn đóng hộp thoại, để đảm bảo r xác nhận đẩy ra gần (và không chỉ nhấn nút 'Hủy'). Điều này có thể được thực hiện với một def.state() === "pending" có điều kiện.
Để biết thêm thông tin về jquery hoãn: http://api.jquery.com/category/deferred-object/
đóng: {$ (this) .remove();} trả về lỗi – Vlado