【问题标题】:jqgrid info dialog function onClosejqgrid信息对话框功能onClose
【发布时间】:2014-02-05 20:51:59
【问题描述】:

我正在显示带有 info_dialog 的服务器错误消息。 当 info_dialog 即将关闭时,我想触发一个函数。我曾尝试通过单击鼠标来完成此操作,但它仅在对话框已关闭后才会触发

第一次鼠标点击:对话框关闭,但没有触发警报

第二次和每一次鼠标点击:警报被触发。

我正在使用单元编辑。 当对话框关闭时,任何知道我如何触发功能的人? 感谢您的帮助。

errorCell:  function(serverresponse, status) {

    $.jgrid.info_dialog(
    $.jgrid.errors.errcap,
    serverresponse.responseText,
    $.jgrid.edit.bClose,
    { zIndex: 1500}
    );


    $(document).click(function() {
    alert( "Handler for .click() called." );
    });
}

【问题讨论】:

    标签: jqgrid


    【解决方案1】:

    $.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 answerthis one 和其他一些方法中使用的一样)。因此,我将所有调用转发给原始 $.jgrid.viewModal 方法,但有一个例外。如果使用onHide 回调参数调用$.jgrid.viewModal 方法,我将转发到原始$.jgrid.viewModal 方法修改后的回调实现。它允许捕捉对话框的关闭。

    更新 2The 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 内部调用的新回调不能这样做。

    【讨论】:

    • 感谢您的回答。问题是,此事件仅在我单击关闭按钮时触发,而不是在我用鼠标单击其他任何位置并且对话框关闭时触发。我现在在 div 中显示错误。
    • 感谢您为帮助我所做的工作!当 info_dialog 第一次打开时,关闭就像一个魅力。当 info_dialog 第二次打开时,我无法关闭它。警报即将到来,但窗口并未关闭。我收到 762 条警报。 (将警报更改为 console.log 以获取数字)。
    • @user3229474:我将答案附加到 UPDATED 2 部分。
    • 我现在已将 $.extend 函数作为普通的 javscript 代码添加,并且仅将 $.jqgrid.info_dialog 添加到 errorcell 事件中。我认为它现在正在工作!在我在 errorcell 事件中同时拥有这两个功能之前。感谢您在这个问题上的帮助,也感谢您回答其他人的所有问题,这对我帮助很大!
    猜你喜欢
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多