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イベントにバインドする運が良かったかもしれません。同じファイルで、DOMIDが削除ボタンにどのように割り当てられているかを確認できます。

.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 に答える