在 loadComplete 中从网格访问 html-元素
Access html-element from grid in loadComplete
所以我想要完成的是当网格完全加载时,我循环遍历包含复选框的特定列。根据复选框的值,我应该能够禁用它。
问题是我无法访问那里的 html 元素。我做错了什么或忽略了什么?
我尝试过的:
loadComplete: function() {
// Fetch all the ID's of the rows
var rows = $("#table").getDataIDs();
// Loop over the rows
if(rows.length != 0){
for(i=0; i < rows.length; i++) {
// Get the data so we test on a certain condition
var row = $("#table").jqGrid("getRowData", rows[i]);
if (row.gridCheckbox == 1) {
//disable the element
row.prop("disabled", "disabled");
}
}
}
}
重要的是要了解更改页面上的 one 元素在大多数情况下会跟随网络浏览器 reflow:验证某些 属性(位置例如)需要在 页面上的所有其他元素 中进行更改。如果您在循环中进行更改,那么您的 JavaScript 代码可能会非常慢。
因此强烈建议减少 DOM 的更改次数。特别是为了减少更改次数,jqGrid 提供了 rowattr
、cellattr
和自定义格式化程序。例如,如果您需要在某些行上设置 disabled
属性,那么您应该 现在 在 loadComplete
中执行此操作,但要使用 rowattr
来通知jqGrid 应该在某些行上设置一些附加属性(disabled="disabled"
)。 jqGrid 首先收集整个 table 主体的字符串表示,并使用 one 赋值 innerHTML
将网格的整个主体填充为一个 DOM 手术。它从本质上提高了性能。请参阅 the old answer 中的代码示例。
所以我想要完成的是当网格完全加载时,我循环遍历包含复选框的特定列。根据复选框的值,我应该能够禁用它。 问题是我无法访问那里的 html 元素。我做错了什么或忽略了什么? 我尝试过的:
loadComplete: function() {
// Fetch all the ID's of the rows
var rows = $("#table").getDataIDs();
// Loop over the rows
if(rows.length != 0){
for(i=0; i < rows.length; i++) {
// Get the data so we test on a certain condition
var row = $("#table").jqGrid("getRowData", rows[i]);
if (row.gridCheckbox == 1) {
//disable the element
row.prop("disabled", "disabled");
}
}
}
}
重要的是要了解更改页面上的 one 元素在大多数情况下会跟随网络浏览器 reflow:验证某些 属性(位置例如)需要在 页面上的所有其他元素 中进行更改。如果您在循环中进行更改,那么您的 JavaScript 代码可能会非常慢。
因此强烈建议减少 DOM 的更改次数。特别是为了减少更改次数,jqGrid 提供了 rowattr
、cellattr
和自定义格式化程序。例如,如果您需要在某些行上设置 disabled
属性,那么您应该 现在 在 loadComplete
中执行此操作,但要使用 rowattr
来通知jqGrid 应该在某些行上设置一些附加属性(disabled="disabled"
)。 jqGrid 首先收集整个 table 主体的字符串表示,并使用 one 赋值 innerHTML
将网格的整个主体填充为一个 DOM 手术。它从本质上提高了性能。请参阅 the old answer 中的代码示例。