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。我的四个 jsp 有自己独特的MyObject. 但是当我触发 jqGrid 的 reloadGrid 时,会提醒最后一个使用此函数的表的 id。

给定:
table1 在 table1.jsp 里面
table2 在 table2.jsp 里面 table3 在 table3.jsp
里面
table4 在 table4.jsp 里面 alerts

$("#table1").trigger("reloadGrid");"table4" alerts "table4
$("#table2").trigger("reloadGrid");" alerts "table4" alerts " table4
$("#table3").trigger("reloadGrid");"正在被触发。为什么会这样?
$("#table4").trigger("reloadGrid");


loadComplete

4

1 回答 1

1

我确实相信触发loadComplete是正确的,问题更多在于 JavaScript 的逻辑。您的示例中缺少变量声明部分,但它看起来像是gTableId一个全局变量。在这种情况下,对它的每次调用都将始终获得其最后一个值(并且您的警报始终采用 的当前值gTableId,它不会以任何方式冻结)。请尝试修改您的loadComplete这样来验证:

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