在 jqGrid 中使用带有自定义格式化程序和 cellEdit 的图像会导致 JavaScript 错误 - 解决方案
当我将 jqGrid 与可编辑单元格(选项中的 cellEdit: true )和基于单元格值返回图像的自定义格式化程序一起使用时,我的 Web 应用程序遇到了问题。
当单击单元格时,该单元格不在图像本身上,单元格编辑就像一个魅力。但是,当单击图像本身时,您会遇到 JavaScript 错误,声称无法找到parentNode。
我没有深入研究这个问题,但我想这与 jqGrid 如何使用自定义格式化程序应用图像,或者它如何尝试获取父节点有关。
无论如何,通过在图像本身上指定一个 onclick 事件来调用其父节点并单击它,可以避免错误。
例如,可以避免此错误的简单自定义格式化程序是:
function booleanFormatter(cellvalue, options, rowObject){
if (cellvalue == true){
return '<img src="checked.png" onclick="this.parentNode.click();"/>';
}
else if (cellvalue == false){
return '<img src="notchecked.png" onclick="this.parentNode.click();"/>';
}
else {
return '';
}
}
使用格式化程序的 colmodel 的摘录可以是:
colmodel: [ { name: 'CheckableCell', index: 'CheckableCell', editable: true, formatter: booleanFormatter}]
I had a problem in my web application when using jqGrid with editable cells (cellEdit: true in options) and a custom formatter that returned an image based on the cell's value.
When clicking in a cell, that is not on the image itself, cell editing works like a charm. However, when clicking on the image itself you encounter a JavaScript-error claiming that parentNode could not be found.
I have not delved far into the problem, but I guess it has something to do with how jqGrid applies the image using the custom formatter, or how it tries to get the parentNode.
Anyway, by specifying an onclick-event on the image itself that calls its parentNode and clicks it the error is avoided.
For example, an easy custom formatter that circumvents this error is:
function booleanFormatter(cellvalue, options, rowObject){
if (cellvalue == true){
return '<img src="checked.png" onclick="this.parentNode.click();"/>';
}
else if (cellvalue == false){
return '<img src="notchecked.png" onclick="this.parentNode.click();"/>';
}
else {
return '';
}
}
An excerpt of a colmodel that utilizes the formatter could be:
colmodel: [ { name: 'CheckableCell', index: 'CheckableCell', editable: true, formatter: booleanFormatter}]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,或者您可以通过更不显眼的、类似 jQuery 的方式实现相同的结果。首先,按如下方式更改格式化程序函数:
接下来,将其添加到网格本身的属性列表中(将函数附加到网格的 gridComplete 事件):
Yes, or you could accomplish the same result in a more unobtrusive, jQuery-like way. First, change the formatter function as follows:
Next, add this to the properties list of the grid itself (attaches a function to the gridComplete event of the grid):