0

jqGrid を作成するための再利用可能な関数を作成しました。

function createJqGrid(){
    $("#" + gTableId).jqGrid({
            datastr: jsonData,
            datatype: 'jsonstring',
            jsonReader: { repeatitems: false, root: function(obj) { return obj; }},
            headertitles: true,
            sortable: true,
            rownumbers: isRowNum,
            colNames: colHeadNames,
            colModel: colModel,
            rowNum: jsonData.length,
            width: viewableWidth,
            height: viewableHeight,     
            shrinkToFit: isShrink,
            scrollOffset: 0,
            onSelectRow: func,
            loadComplete: function(data) {
                alert(gTableId);                
            }
        });
}

この関数とパラメータのすべての設定は、 内にカプセル化されていMyObjectます。私の 4 つの jsp には、MyObject. しかし、jqGrid の reloadGrid をトリガーすると、この関数を使用した最後のテーブルの ID が警告されます。


table1 は table1.jsp 内にあるtable2
は table2.jsp 内にある
table3 は table3.jsp 内にある table4
は table4.jsp 内にある

$("#table1").trigger("reloadGrid");アラート "table4"
$("#table2").trigger("reloadGrid");アラート "table4"
$("#table3").trigger("reloadGrid");アラート "table4"
$("#table4").trigger("reloadGrid");アラート "table4"


最後loadCompleteに作成されたテーブルの発動中です。なぜそうなのですか?

4

1 に答える 1

1

トリガーloadCompleteされたものは正しいものであり、問​​題は JavaScript のロジックにあると思います。サンプルには変数宣言セクションがありませんgTableIdが、グローバル変数のようです。その場合、それへのすべての呼び出しは常に最後の値を取得します(アラートは常に の現在の値を取得しgTableId、決して凍結されません)。loadComplete確認するために、次のように変更してみてください。

loadComplete: function(data) {
    alert($(this).attr('id');
}
于 2012-08-28T07:27:19.360 に答える