jqGrid - 内部包含TD元素的单元格

时间:2011-12-06 23:13:35

标签: jquery ajax jqgrid

我似乎有一个问题,如果我已经加载了其中一个单元格中有一个表格的数据,jQuery Grid(jqGrid),当onSelectRow()被触发时它会抛出一个错误,我调用{{1} }。

jqGrid似乎在枚举所选行中的所有TD元素(包括给定单元格中表的子元素)。

是否有正确的方法来阻止jqGrid枚举这些元素? :(

编辑:在我的特定情况下,HTML被隐藏直到需要,所以我能够在服务器上用“xtd”替换TD,直到发送给客户端。在客户端,当我需要HTML时,我只需将“xtd”替换为“td”。仍然希望有更好的方法。

编辑:我想澄清一下,我希望这样做的方法不会修改插件。一个写得很好的修改仍然会很好。

2 个答案:

答案 0 :(得分:1)

旧但尚未解决。

您好。 是jqGrid内部tabletd 存在问题,但有一个快速有用的修复方法。在文件jquery.jqGrid.min(jqGrid 3.8.2 - jQuery Grid)中。将文件放入js-beutifier或获取缩小版本并找到getRowData函数。然后,您必须添加额外条件才能查找foreach b("td", r).each(function (t) {以编码 b("td[id!='-1']", r).each(function (t) { 。在你的内表中,你应该声明<td id="-1">。在这种情况下,您可以在colModel中搜索td。

复制/粘贴此代码:

getRowData: function (f) {
            var j = {},
                i, c = false,
                e, k = 0;
            this.each(function () {
                var n = this,
                    a, r;
                if (typeof f == "undefined") {
                    c = true;
                    i = [];
                    e = n.rows.length
                } else {
                    r = n.rows.namedItem(f);
                    if (!r) return j;
                    e = 2
                }
                for (; k < e;) {
                    if (c) r = n.rows[k];
                    if (b(r).hasClass("jqgrow")) {
                        b("td[id!='-1']", r).each(function (t) {//fix
                            a = n.p.colModel[t].name;
                            if (a !== "cb" && a !== "subgrid" && a !== "rn") if (n.p.treeGrid === true && a == n.p.ExpandColumn) j[a] = b.jgrid.htmlDecode(b("span:first", this).html());
                            else try {
                                j[a] = b.unformat(this, {
                                    rowId: r.id,
                                    colModel: n.p.colModel[t]
                                }, t)
                            } catch (B) {
                                j[a] = b.jgrid.htmlDecode(b(this).html())
                            }
                        });
                        if (c) {
                            i.push(j);
                            j = {}
                        }
                    }
                    k++
                }
            });
            return i ? i : j
        }

最后你要把内表放在哪里:

<table>
    <tr>
        <td id="-1">
            Now It's working!
        </tr>
        <td id="-1">
            Yeah
        </tr>
    </tr>
</table>

当然您可以更改id属性,但我建议使用html id属性修复此问题,因为jQuery性能针对class属性。

答案 1 :(得分:0)

我实施了另外一个选项。而不是操纵jqGrid核心javascript,为什么不在创建表的Cell中使用th标签而不是td标签。

我有类似的要求,并继续进行上述实现(jqgrid.min.js操作)。但接下来发生的事情是与我们试图获取的Column#和Cell#不匹配。例如,我必须动态设置一个单元格,虽然column-id是正确的,但它正在编辑/更改一个不同的单元格(因为其中一个单元格中有额外的td标记)。

我继续使用th而不是td标签用于我在Cell中创建的自定义表。到目前为止工作。