我發現使用jquery小部件進行模式對話並處理刪除/取消按鈕很方便。
(function ($) {
$.widget('my.confirmDialog', {
options: {
url: null,
elements: null,
postParamName: 'id',
afterDelete: null
},
_create: function() {
var that = this;
var options = that.options;
that.element.dialog({
resizable: false,
autoOpen: false,
modal: true,
buttons: {
"Delete": function (e, ui) {
$(this).dialog("close");
$.post(options.url, that.postData, function (resp) {
that._trigger('afterDelete', e, resp);
});
},
"Cancel": function() {
$(this).dialog("close");
}
}
});
options.elements.live('click', function (event, ui) {
that.askConfirmation(this);
});
},
askConfirmation: function (askElem) {
var that = this;
var confirmationText = $(askElem).attr("data-confirmation");
that.element.text(confirmationText);
var postData = {};
postData[that.options.postParamName] = $(askElem).attr("data-value");
that.postData = postData;
that.element.dialog("open");
},
destroy: function() {
this.element.dialog("destroy");
$.Widget.prototype.destroy.apply(this, arguments);
}
});
} (jQuery));
的使用非常簡單,你只爲確認對話框創建的div:
<div title="Delete confirmation" id="sampleDeleteConfirmation"
style="display: none;">
</div>
和應用小工具,這個div,傳遞應觸發確認對話框中顯示的元素:
$(document).ready(function() {
$("#sampleDeleteConfirmation").confirmDialog({
url: '/DeleteUrl',
postParamName: 'canChangeThisIfNeeded',
elements: $(".confirmThis"),
afterDelete: function (event, response) {
//callback after delete
}
});
});
也爲便於我使用數據屬性上的按鈕,顯示模式對話框來修改文本和傳遞值來發布刪除操作。
<button type="button" class="confirmThis" data-value="123" data-confirmation="Delete item 123?">
Delete
</button>
<button type="button" class="confirmThis" data-value="567" data-confirmation="Delete item 567?">
Delete
</button>
和多數民衆贊成)
謝謝傑米Hutber。 – 2011-12-23 14:46:58
有什麼方法可以爲您的解決方案添加一些樣式(CSS)。它看起來不太好... :)謝謝 – 2011-12-23 14:50:29
可悲的是風格是瀏覽器sepsific。如果你打算引入一個樣式化的版本,我會動態添加一個新的元素,並在那裏只有一個鏈接到刪除。刪除一旦用戶點擊它。或者看看http://jqueryui.com/demos/dialog/並把我的鏈接放在那裏,然後在你的ajax成功的情況下,我會關閉這個盒子。這樣你就知道這個盒子只會在請求成功時纔會消失。 – 2011-12-23 15:12:00