我似乎有一个问题,如果我已经加载了其中一个单元格中有一个表格的数据,jQuery Grid(jqGrid),当onSelectRow()
被触发时它会抛出一个错误,我调用{{1} }。
jqGrid似乎在枚举所选行中的所有TD元素(包括给定单元格中表的子元素)。
是否有正确的方法来阻止jqGrid枚举这些元素? :(
编辑:在我的特定情况下,HTML被隐藏直到需要,所以我能够在服务器上用“xtd”替换TD,直到发送给客户端。在客户端,当我需要HTML时,我只需将“xtd”替换为“td”。仍然希望有更好的方法。编辑:我想澄清一下,我希望这样做的方法不会修改插件。一个写得很好的修改仍然会很好。
答案 0 :(得分:1)
旧但尚未解决。
您好。 是jqGrid内部table
和td
存在问题,但有一个快速有用的修复方法。在文件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中创建的自定义表。到目前为止工作。