jqgrid info dialog function onClose

前端 未结 1 934
闹比i
闹比i 2021-01-27 02:21

i am showing the server error message with an info_dialog. I would like to fire a function, when the info_dialog ist getting closed. I have tried to do it with a mouse click, bu

相关标签:
1条回答
  • 2021-01-27 02:40

    The method $.jgrid.info_dialog supports onClose callback which will be called on closing. The return value from the callback informs whether the closing is permitted. Just try the code

    $.jgrid.info_dialog(
        $.jgrid.errors.errcap,
        serverresponse.responseText,
        $.jgrid.edit.bClose,
        {
            zIndex: 1500,
            onClose: function () {
                alert("inside onClose");
                return true; // allow closing
            }
        }
    );
    

    UPDATED: To catch closing of $.jgrid.info_dialog in case of clicking with the mouse outside of the dialog one have to do more complex trick.

    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
        }
    });
    

    In the first part of the code I use "subclassing" of $.jgrid.viewModal method (like I used in the answer, this one and some other). So I forward all calls to original $.jgrid.viewModal method with one exception. If $.jgrid.viewModal method are called with onHide callback parameter I forward to original $.jgrid.viewModal method modified implementation of the callback. It allows to catch closing of the dialog.

    UPDATED 2: The demo shows the approach live.

    Alternatively (instead of subclassing) you can just modify the lines

    onHide: function(h) {
        h.w.hide().remove();
        if(h.o) { h.o.remove(); }
    },
    

    of info_dialog in jquery.jqGrid.src.js. You need just insert additional call of mopt.onClose if the option defined. Probably one should include additional callback onClosed because onClose can deny closing, but new callback called inside of onHide can't do this.

    0 讨论(0)
提交回复
热议问题