Javascript 当(多)选择一行时,我该如何修复jqGrid抛出的错误:“className”为null或不是对象?

Javascript 当(多)选择一行时,我该如何修复jqGrid抛出的错误:“className”为null或不是对象?,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我的工作很好。然后我去重构我的代码以使用OLN,并在我的网格中添加了一些默认值 以下是默认代码块: var Grid = { SiteMaster: { setDefaults: function () { $.jgrid.defaults = $.extend($.jgrid.defaults, { datatype: 'json', height: "100%", loadui: 'bloc

我的工作很好。然后我去重构我的代码以使用OLN,并在我的网格中添加了一些默认值

以下是默认代码块:

var Grid = {  
SiteMaster: {
    setDefaults: function () {
        $.jgrid.defaults = $.extend($.jgrid.defaults, {
            datatype: 'json', 
            height: "100%",
            loadui: 'block',
            images: "/images/",
            jsonReader: {
                root: "Rows",
                page: "Page",
                total: "Total",
                records: "Records",
                repeatitems: false,
                userdata: "UserData",
                id: "Id"
            },
            loadui: "block",
            mtype: 'GET',
            autowidth: true,
            rowNum: 10,
            rowList: [10, 20],
            viewrecords: true
        });
    }
  }
};
下面是实际的网格代码:

setupGrid: function (grid, pager) {
            disableControls();
            grid.jqGrid({
                colNames: ['Description', 'Ship Date', 'Memo'],
                colModel: [
                    { name: 'Description', index: 'Description', width: 400, align: 'left' },
                    { name: 'ShipDateDisplay', index: 'ShipDateDisplay', width: 100, align: 'left' },
                    { name: 'Memo', index: 'Memo', width: 200, align: 'left'}],
                pager: pager,
                url: gridurl,
                pager: pager,
                multiselect: true,
                multiboxonly: true,
                loadComplete: enableControls
            });

            initGridSearch();
        }
以下是我的脚本参考:

<script src="/CommonWeb/js/common.js" type="text/javascript"></script>
<script src="/CommonWeb/js/jquery.js" type="text/javascript"></script>
<script src="/CommonWeb/js/jquery.ui.js" type="text/javascript"></script>
<script src="/CommonWeb/js/jquery.blockUI.js" type="text/javascript"></script>
<script src="/CommonWeb/js/grid.locale-en.js" type="text/javascript"></script>
<script src="/CommonWeb/js/jquery.jqGrid.js" type="text/javascript"></script>    
<script src="/CommonWeb/js/grid.addons.js" type="text/javascript"></script>    
<script src="/CommonWeb/js/grid.postext.js" type="text/javascript"></script>    
<script src="/CommonWeb/js/grid.setcolumns.js" type="text/javascript"></script>    
<script src="/CommonWeb/js/jquery.contextmenu.js" type="text/javascript"></script>    
<script src="/CommonWeb/js/jquery.searchFilter.js" type="text/javascript"></script>    
<script src="/CommonWeb/js/jquery.tablednd.js" type="text/javascript"></script>    
<script src="/CommonWeb/js/ui.multiselect.js" type="text/javascript"></script>    
<script src="@Url.Content("~/Content/js/Global.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Content/js/Grid.js")" type="text/javascript"></script>

由于重构,每次我单击一行或通过复选框控件选择它时,我都会得到javascript错误“className”为null或不是对象。有什么想法吗?提前感谢。

您发布的代码不足,无法重现问题。您使用哪个版本的jqGrid

setDefaults的代码,您尝试在$.jgrid.defaults中设置一些默认值,对我来说似乎不正确。不应将$.extend$.jgrid.defaults、{…}的结果分配给$.jgrid.defaults。正确的方法是打电话

什么是图像:/images/参数?您不需要将loadui:block第二次定义为loadui:block

插入jquery.jqGrid.js或插入grid.locale-en.js,否则我会觉得不对。我建议您查看jquery.jqGrid.js的内部。jqGrid的4.0版包括jquery.jqGrid.src.js,使用它可能更好

为什么要插入这么多模块?你用它吗?例如,插入旧的jquery.searchFilter.js可以覆盖jqGrid的新搜索模块grid.filter.js


您应该从colModel中删除默认值align:“left”。

结果表明,我没有随数据一起发送唯一标识符。此数据来自一个没有键的旧表。一旦我在上面添加了一个标识字段并生成了一个Id,一切就又开始工作了。

感谢提供有关dup条目和额外模块的提示。我并没有真正考虑这些模块,只是把它们都扔了进去。这是jqGrid 4.0,所以你说得对。如果我将区域设置文件移到jqgrid文件之后,就会出现错误,仅供参考。但我确实解决了我的问题,请参见答案。@IronicMuffin:如果在jqgrid文件之后移动区域设置文件,则会收到另一个错误,因为grid.locale-en.js作为jquery.jqgrid.js的一部分插入。问题是jqGrid没有jquery.jqGrid.js文件。scr目录中只有grid.loader.js。如果服务器响应具有非唯一ID,则这是一个错误,但您将永远不会出现您描述的任何异常。如果未包含某个JavaScript文件或多次包含一个JavaScript文件,则会出现异常。我确信这是你的错误。Oleg,我自己将jquery.jqGrid.src.js重命名为jquery.jqGrid.js。我不同意你对这个例外的分析。我确保返回唯一的id,它立即工作。我也有同样的问题,但我有一个id字段。问题是这个领域的数据不是唯一的