如何使用 Fontawesome 复选框格式化程序从免费 jqgrid 中发布的行中删除操作按钮
How to remove action buttons from posted rows in free jqgrid using Fontawesome checkbox formatter
免费 jqgrid 包含布尔隐藏列 IsPosted 定义为
{"label":null,"name":"IsPosted",
"edittype":"checkbox","editoptions":{"value":"True:False","readonly":"readonly","disabled":"disabled"},
"align":"center",
"formatter":"checkboxFontAwesome4",
"editable":true,
"width":0,"classes":null,
"hidden":true,"stype":"select",
"searchoptions":{"sopt":["eq","ne"],
"value":":Free;true:Yes;false:No"}
}],
删除、编辑和自定义 post 按钮需要从内联操作工具栏中删除,如果此列的值为 true。 Rhis 是使用 method
完成的
disableRows('IsPosted', true);
它适用于可点击的复选框格式化程序。如果使用 checkboxFontAwesome4 格式器,
isPosted = $(row.cells[iCol]).find(">span>div>input:checked").length > 0;
总是错误的。我也试过了
isPosted = $(row.cells[iCol]).children("input:checked").length > 0;
但这对所有格式化程序都是错误的。我也试过 template = "booleanCheckboxFa",
而不是格式化程序行,但这不显示 fontawecome 图标。
如何修复它以便它与 checkboxFontAwesome4 格式化程序或所有格式化程序一起工作?
var disableRows = function (rowName, isBoolean) {
var iCol = getColumnIndexByName($grid, rowName),
cRows = $grid[0].rows.length,
iRow,
row,
className,
isPosted,
mycell,
mycelldata,
cm = $grid.jqGrid('getGridParam', 'colModel'),
iActionsCol = getColumnIndexByName($grid, '_actions'), l;
l = cm.length;
for (iRow = 0; iRow < cRows; iRow = iRow + 1) {
row = $grid[0].rows[iRow];
className = row.className;
isPosted = false;
if ($(row).hasClass('jqgrow')) {
if (!isBoolean) {
mycell = row.cells[iCol];
mycelldata = mycell.textContent || mycell.innerText;
isPosted = mycelldata.replace(/^\s+/g, "").replace(/\s+$/g, "") !== "";
}
else {
isPosted = $(row.cells[iCol]).find(">span>div>input:checked").length > 0;
}
if (isPosted) {
if ($.inArray('jqgrid-postedrow', className.split(' ')) === -1) {
row.className = className + ' jqgrid-postedrow not-editable-row';
$(row.cells[iActionsCol]).attr('editable', '0');
$(row.cells[iActionsCol]).find(">div>div.ui-inline-del").hide();
$(row.cells[iActionsCol]).find(">div>div.ui-inline-post").hide();
$(row.cells[iActionsCol]).find(">div>div.ui-inline-edit").hide();
}
}
}
}
};
我不确定我是否正确理解了你的问题。可能您只想测试单元格 row.cells[iCol]
是否包含选中符号(<i>
和 class fa-check-square-o
)或未选中(<i>
和 fa-square-o
).您可以只使用格式化程序。如果你更喜欢像
这样的低级方式
isPosted = $(row.cells[iCol]).find(">span>div>input:checked").length > 0;
那么你可以使用
isPosted = $(row.cells[iCol]).find("i").hasClass("fa-check-square-o");
相反。
更新:一个可以使用
var isPostedStr = $.unformat.call(this, row.cells[iCol],
{rowId: row.id, colModel: cm}, iCol);
if (cm.convertOnSave) {
isPosted = cm.convertOnSave.call(this, {
newValue: isPostedStr,
cm: cm,
oldValue: isPostedStr,
id: row.id,
//item: $grid.jqGrid("getLocalRow", row.id),
iCol: iCol
});
}
我假设 this
等于 $grid[0]
而 cm
等于 colModel[iCol]
。返回值将是字符串 "true"
或 "false"
并且要具有布尔变量,您需要将其转换为 true 或 false。确切的返回值取决于 editoptions.value
使用哪个。 template: "booleanCheckboxFa"
使用 editoptions: {value: "true:false", defaultValue: "false"}
。所以返回值是字符串 "true"
或 "false"
。如果您想将结果干净地转换为布尔值,我建议您查看 convertOnSave 的代码。我包括了 cm.convertOnSave
的调用,以防它存在。在常见情况下,应该初始化行的 item
属性,但是像 formatter: "checkboxFontAwesome4"
这样的简单格式化程序不使用该值。
免费 jqgrid 包含布尔隐藏列 IsPosted 定义为
{"label":null,"name":"IsPosted",
"edittype":"checkbox","editoptions":{"value":"True:False","readonly":"readonly","disabled":"disabled"},
"align":"center",
"formatter":"checkboxFontAwesome4",
"editable":true,
"width":0,"classes":null,
"hidden":true,"stype":"select",
"searchoptions":{"sopt":["eq","ne"],
"value":":Free;true:Yes;false:No"}
}],
删除、编辑和自定义 post 按钮需要从内联操作工具栏中删除,如果此列的值为 true。 Rhis 是使用 method
完成的 disableRows('IsPosted', true);
它适用于可点击的复选框格式化程序。如果使用 checkboxFontAwesome4 格式器,
isPosted = $(row.cells[iCol]).find(">span>div>input:checked").length > 0;
总是错误的。我也试过了
isPosted = $(row.cells[iCol]).children("input:checked").length > 0;
但这对所有格式化程序都是错误的。我也试过 template = "booleanCheckboxFa",
而不是格式化程序行,但这不显示 fontawecome 图标。
如何修复它以便它与 checkboxFontAwesome4 格式化程序或所有格式化程序一起工作?
var disableRows = function (rowName, isBoolean) {
var iCol = getColumnIndexByName($grid, rowName),
cRows = $grid[0].rows.length,
iRow,
row,
className,
isPosted,
mycell,
mycelldata,
cm = $grid.jqGrid('getGridParam', 'colModel'),
iActionsCol = getColumnIndexByName($grid, '_actions'), l;
l = cm.length;
for (iRow = 0; iRow < cRows; iRow = iRow + 1) {
row = $grid[0].rows[iRow];
className = row.className;
isPosted = false;
if ($(row).hasClass('jqgrow')) {
if (!isBoolean) {
mycell = row.cells[iCol];
mycelldata = mycell.textContent || mycell.innerText;
isPosted = mycelldata.replace(/^\s+/g, "").replace(/\s+$/g, "") !== "";
}
else {
isPosted = $(row.cells[iCol]).find(">span>div>input:checked").length > 0;
}
if (isPosted) {
if ($.inArray('jqgrid-postedrow', className.split(' ')) === -1) {
row.className = className + ' jqgrid-postedrow not-editable-row';
$(row.cells[iActionsCol]).attr('editable', '0');
$(row.cells[iActionsCol]).find(">div>div.ui-inline-del").hide();
$(row.cells[iActionsCol]).find(">div>div.ui-inline-post").hide();
$(row.cells[iActionsCol]).find(">div>div.ui-inline-edit").hide();
}
}
}
}
};
我不确定我是否正确理解了你的问题。可能您只想测试单元格 row.cells[iCol]
是否包含选中符号(<i>
和 class fa-check-square-o
)或未选中(<i>
和 fa-square-o
).您可以只使用格式化程序。如果你更喜欢像
isPosted = $(row.cells[iCol]).find(">span>div>input:checked").length > 0;
那么你可以使用
isPosted = $(row.cells[iCol]).find("i").hasClass("fa-check-square-o");
相反。
更新:一个可以使用
var isPostedStr = $.unformat.call(this, row.cells[iCol],
{rowId: row.id, colModel: cm}, iCol);
if (cm.convertOnSave) {
isPosted = cm.convertOnSave.call(this, {
newValue: isPostedStr,
cm: cm,
oldValue: isPostedStr,
id: row.id,
//item: $grid.jqGrid("getLocalRow", row.id),
iCol: iCol
});
}
我假设 this
等于 $grid[0]
而 cm
等于 colModel[iCol]
。返回值将是字符串 "true"
或 "false"
并且要具有布尔变量,您需要将其转换为 true 或 false。确切的返回值取决于 editoptions.value
使用哪个。 template: "booleanCheckboxFa"
使用 editoptions: {value: "true:false", defaultValue: "false"}
。所以返回值是字符串 "true"
或 "false"
。如果您想将结果干净地转换为布尔值,我建议您查看 convertOnSave 的代码。我包括了 cm.convertOnSave
的调用,以防它存在。在常见情况下,应该初始化行的 item
属性,但是像 formatter: "checkboxFontAwesome4"
这样的简单格式化程序不使用该值。