$.jgrid.info_dialog 方法支持onClose 回调,该回调将在关闭时调用。回调的返回值通知是否允许关闭。试试代码
$.jgrid.info_dialog(
$.jgrid.errors.errcap,
serverresponse.responseText,
$.jgrid.edit.bClose,
{
zIndex: 1500,
onClose: function () {
alert("inside onClose");
return true; // allow closing
}
}
);
更新:要在使用鼠标点击对话框外部的情况下捕捉$.jgrid.info_dialog的关闭,必须执行更复杂的技巧。
var orgViewModal = $.jgrid.viewModal;
$.extend($.jgrid,{
viewModal: function (selector, options) {
if (options.onHide) {
options.orgOnHide = options.onHide;
options.onHide = function (h) {
alert("inside onHide");
return options.orgOnHide.call(this, h);
}
}
return orgViewModal.call (this, selector, options);
}
});
$.jgrid.info_dialog($.jgrid.errors.errcap, "Test message",$.jgrid.edit.bClose, {
zIndex: 1500,
onClose: function () {
alert("inside onClose");
return true; // allow closing
}
});
在代码的第一部分,我使用$.jgrid.viewModal 方法的“子类化”(就像我在the answer、this one 和其他一些方法中使用的一样)。因此,我将所有调用转发给原始 $.jgrid.viewModal 方法,但有一个例外。如果使用onHide 回调参数调用$.jgrid.viewModal 方法,我将转发到原始$.jgrid.viewModal 方法修改后的回调实现。它允许捕捉对话框的关闭。
更新 2:The demo 现场展示了该方法。
或者(而不是子类化)你可以修改the lines
onHide: function(h) {
h.w.hide().remove();
if(h.o) { h.o.remove(); }
},
info_dialog 中的jquery.jqGrid.src.js。如果定义了选项,您只需插入额外的mopt.onClose 调用。可能应该包含附加回调onClosed,因为onClose 可以拒绝关闭,但在onHide 内部调用的新回调不能这样做。