2

わかりました、これはばかげているに違いありませんが、私はそれを見つけることができませんでした...

IDが「グリッド」のjqGridがあります(インスピレーションを得て、知っています)。私は次のようにグリッドにナビゲーションボタンを追加しています:

jQuery("#grid").navButtonAdd('#pager', {
        caption : "Manage Files",           
        onClickButton : function(){                         
            var rowid = $('#grid').jqGrid('getGridParam', 'selrow');
            if(rowid == null) 
                alert('Please select a record before trying to manage files');
            makeUploadDialog(rowid);
        }

    });

だから、これはうまくいきます。初めてやります。別の行をクリックしてもう一度ボタンを押すと、次のエラーが発生します。

Uncaught TypeError: Object [object Object] has no method 'jqGrid' 

イベントの順序付けで悪いモジョが起こっていると推測していますが、スタック投稿でオレグが使用したこの正確なアプローチを見たことがあることは知っています(2年前のものですが)。

助言がありますか?

[編集してコードとコンテキストを追加]

この問題は、ダイアログのコンテンツの AJAX 読み込みによって何らかの形で引き起こされていることがわかりました。私は問題なく他のプロジェクトでこの種の操作を行ったので、この場合、なぜ「コンテキストを失う」原因になるのか混乱しています。下の最後の行をコメント アウトすると、呼び出しを呼び出すと、ダイアログを繰り返し開いたり閉じたりして、グリッド機能を維持できます。理由がわかりません...

function makeUploadDialog(rowID) {      
    var dialog = $('<div></div>').appendTo('body');
    dialog.dialog({
        width: 850, 
        autoOpen: true,
        draggable: true,
        resizable: false,
        title: 'Manage Artifacts',
        buttons: {
            Close: function () {
                $("#grid").trigger("reloadGrid");
                dialog.remove();                
            }
        }, 
        close: function () {                
            $("#grid").trigger("reloadGrid");
            dialog.remove();                
        }
    }); 
    dialog.load('getUploadDialog.html?rowId='+rowID);

[編集×2]

#grid オブジェクトが #.load? $('#grid') の console.log を実行したところ、実際にはすべての jqGrid メソッドが欠落していることがわかりますが、ダイアログに属しているように見えるコンテンツがいくつかあります (MultiFile オブジェクトへの参照など)。 ..これは、ファイルのアップロードのためにダイアログ自体で使用される MultiFile.js の一部です)。本当に当惑します。

4

2 に答える 2