2

所以我在这里找到了一些很好的修复方法,可以将确认删除、编辑、查看等对话框居中。但是,当网格上没有选择行时,将出现一个不同的对话框,显示一个简单的“警告:请选择行”。除了这个对话框的语法很糟糕之外,我似乎找不到任何方法来处理这个对话框的事件,以便我可以根据需要重新定位。

我为我能找到的 navGrid 中的每个事件添加了处理程序,并使用 BugZilla 来查看它是否会在任何这些事件上停止但无济于事。选择行时,它将释放删除事件罚款。想法?下面是我的代码:

$('#sessionGrid').jqGrid({...}).navGrid('#sessionPager', { 
            add: false,
            edit: false,
            del: true,
            search: false,
            closeOnEscape: true
        }, {
            afterShowForm: function (form) {
                form.closest('div.ui-jqdialog').center();
            }
        }, {
            afterShowForm: function (form) {
                form.closest('div.ui-jqdialog').center();
            }
        }, {
            caption: "Delete",
            msg: "Delete the selected sessions?",
            bSubmit: "Delete",
            bCancel: "Cancel",
            afterShowForm: function (form) {
                form.closest('div.ui-jqdialog').center();
            }
        }, {
            afterShowForm: function (form) {
                form.closest('div.ui-jqdialog').center();
            }
        }, {
            afterShowForm: function (form) {
                form.closest('div.ui-jqdialog').center();
            }
        });
4

1 回答 1

0

grid.formedit.js中的以下代码用于显示此对话框:

if (o.del) {
    tbd = $("<td class='ui-pg-button ui-corner-all'></td>");
    pDel = pDel || {};
    $(tbd).append("<div class='ui-pg-div'><span class='ui-icon "+o.delicon+"'></span>"+o.deltext+"</div>");
    $("tr",navtbl).append(tbd);
    $(tbd,navtbl)
    .attr({"title":o.deltitle || "",id: pDel.id || "del_"+elemids})
    .click(function(){
        if (!$(this).hasClass('ui-state-disabled')) {
            var dr;
            if($t.p.multiselect) {
                dr = $t.p.selarrrow;
                if(dr.length===0) {dr = null;}
            } else {
                dr = $t.p.selrow;
            }
            if(dr){
                if($.isFunction( o.delfunc )){
                    o.delfunc.call($t, dr);
                }else{
                    $($t).jqGrid("delGridRow",dr,pDel);
                }
            } else  {
// !!! The actual dialog is displayed here  -
                $.jgrid.viewModal("#"+alertIDs.themodal,{gbox:"#gbox_"+$.jgrid.jqID($t.p.id),jqm:true});$("#jqg_alrt").focus();
            }
        }
        return false;
    }).hover(
        function () {
            if (!$(this).hasClass('ui-state-disabled')) {
                $(this).addClass("ui-state-hover");
            }
        },
        function () {$(this).removeClass("ui-state-hover");}
    );
    tbd = null;
}

不幸的是,jqGrid 没有为此公开事件。但是您可能会幸运地将自己的函数绑定到删除按钮的click事件。在同一个文件中,您可以看到 DOM ID 是如何分配给删除按钮的:

.attr({"title":o.deltitle || "",id: pDel.id || "del_"+elemids})

本质上,您可以将id参数作为删除参数的一部分传递,或者如果您不这样做,它将默认elemids分配给哪个网格的 DOM ID(例如:您的选择器将是'#del_mygrid')。

jQuery('div.ui-jqdialog').center();无论如何,您可以在事件处理程序中使用类似的东西click来根据需要重新定位对话框。

这有帮助吗?


顺便说一句,实际的对话文本在grid.locale-en.js-

alerttext: "请选择行",

我同意这太可怕了 :) 好消息是这是一个单独的 js 文件,因此您可以根据需要对其进行修改。

于 2012-07-17T21:41:43.663 回答