有没有办法通过单选按钮http://www.ok-soft-gmbh.com/jqGrid/SimpleLocalGridWidthRadioButton2.htm获取类似于此复选框的行为 包含用于选择/取消全选的复选框。 该行上的行选择和复选框可能无法链接,就像使用单选按钮的示例一样。
更新
这是我的代码:
$("#list").jqGrid({
datatype: "local",
data: mydata,
colNames: ["Client", "Date", "Amount", "Tax", "Total", "Shipped via", "Notes"],
colModel: [
{name: "name", width: 70, frozen: true},
{name: "invdate", width: 80, align: "center", sorttype: "date",
formatter: "date", formatoptions: {newformat: "d-M-Y"}, datefmt: "d-M-Y"},
{name: "amount", width: 75, formatter: "number", sorttype: "number", align: "right"},
{name: "tax", width: 55, formatter: "number", sorttype: "number", align: "right"},
{name: "total", width: 65, formatter: "number", sorttype: "number", align: "right"},
{name: "ship_via", width: 100, align: "center", formatter: "select",
edittype: "select", editoptions: {value: "FE:FedEx;TN:TNT;IN:Intim", defaultValue: "IN"}},
{name: "note", width: 70, sortable: false}
],
rowNum: 10,
rowList: [5, 10, 20],
pager: "#pager",
gridview: true,
rownumbers: true,
sortname: "invdate",
viewrecords: true,
sortorder: "desc",
caption: "Handling of changing of chechboxes in the grid",
height: "auto",
multiselect: true,
multiboxonly: true,
beforeSelectRow: function (rowid, e) {
var $target = $(e.target), $td = $target.closest("td"),
iCol = $.jgrid.getCellIndex($td[0]),
colModel = $(this).jqGrid("getGridParam", "colModel");
if (iCol >= 0 && $target.is(":checkbox")) {
return false;
}
return true;
},
onSelectRow: function (rowid, isSelected, event) {
var rowData = $("#list").jqGrid("getRowData", rowid);
var checkbox = jQuery(this).find('#' + rowid + ' input#jqg_list_'+rowid+'[type=checkbox]');
if ($(checkbox).is(':checked')) {
$(checkbox).attr('checked', false);
}
},
});
http://jsfiddle.net/yNw3C/12696/
正如您所看到的,问题是当我点击之前选中的行时,它将取消选中该复选框。
答案 0 :(得分:0)
点击该行不会检查您的复选框,除非有代码明确指出这一点。所以我猜你遇到麻烦的是当你点击一个复选框时你的行的onclick处理程序被调用了。要防止这种情况,请添加stopPropegation():
$('table checkbox').click(function(event) {
event.stopPropagation();
});
还有stopImmediateProgagation(),但stopPropagation()应该足以满足您的需求。
如果这不能解决问题,请发布JsFiddle或提供实时链接,以便更容易看到您的代码正在做什么。
更新: 您的onRowSelect处理程序(第60行)定位行中的所有复选框,如果您更新第64行以定位您感兴趣的特定复选框,它将像您期望的那样工作:
var checkbox = jQuery(this).find('#' + rowid + ' input#jqg_list_'+rowid+'[type=checkbox]');
而不是
var checkbox = jQuery(this).find('#' + rowid + ' input[type=checkbox]');
UPDATE2:
是的,这并不能完全解决您的问题。我已经尝试了几种方法,似乎每种合理的方法都试图解决这个问题,最终只会过多地对抗插件。根据文档,'multiselect:true'和'multiboxonly:true'选项应该足够了。我会向插件维护者提交一份错误报告。
答案 1 :(得分:0)
$(function () {
$('#toggleAll').click(function (event) {
var checked = event.target.checked;
$("input[name='checkIds']").each(function (e) {
this.checked = checked;
})
event.stopPropagation();
});
}
var chkBoxs = "<input type='checkbox' id='toggleAll' />";
var colNames = [chkBoxs];
当我在jqGrid中使用checkbox组件时,我遇到了同样的问题。上面的代码片段代码是解决问题的有效方法。 实际上,js的事件机制导致了麻烦。