Jqgrid TreeGrid如何在标记为父级时选中/取消选中所有子子级复选框

Jqgrid TreeGrid如何在标记为父级时选中/取消选中所有子子级复选框,jqgrid,checkbox,treegrid,Jqgrid,Checkbox,Treegrid,我已经在“name”列中构建了带有嵌入式复选框的treeGrid,例如JSON数据: {"id":"1","name":"<input type='checkbox' class='itmchk' ><strong>ECHANGEUR<\/strong>","level":"0","parent":"null","isLeaf":false,"expanded":true,"loaded":true} {“id”:“1”,“name”:“ECHANGEUR”

我已经在“name”列中构建了带有嵌入式复选框的treeGrid,例如JSON数据:

{"id":"1","name":"<input type='checkbox' class='itmchk' ><strong>ECHANGEUR<\/strong>","level":"0","parent":"null","isLeaf":false,"expanded":true,"loaded":true}
{“id”:“1”,“name”:“ECHANGEUR”,“level”:“0”,“parent”:“null”,“isLeaf”:false,“expanded”:true,“loaded”:true}
因为这些复选框跟在树的边距后面(我希望我能很好地理解,因为我是法国人)

当我标记/取消标记一行时,我想选中/取消选中子级别复选框,但在阅读五月的帖子后,我可以获得预期的结果

举例说明: 如果我单击父行复选框(使其处于未选中状态),子级别行将处于未选中状态

我是jqGrid的新手,但它是一个很棒的工具,我想学习它的属性。 请你这样开车送我好吗?或者你能建议我在哪里可以找到我想做的例子吗?我曾寻找过文档,但没有成功

非常感谢
JiheL

首先,我建议不要将HTML片段放在JSON数据中。可用于在网格单元内包含复选框:

格式化程序:函数(cellvalue){
返回“”+
$.jgrid.htmlEncode(cellvalue)+“”;
}
要控制复选框的选中/取消选中,您可以在选择行之前使用
网格回调。jqGrid内部绑定
单击
事件到网格体。因此,没有事件处理程序直接存在于发生的元素上。它允许在SelectRow
回调之前捕获选中/取消选中一个
内的任何复选框。在选择行之前,在
的内部,您应该首先测试是否单击了要控制的复选框

Callback
beforeselectionRow
有两个参数:
rowid
和。事件对象的属性
target
将是用户单击的DOM元素。因为您将自定义的
itmchk
类添加到每个这样的复选框中,所以在单击的元素上验证该类就足够了

下一个问题是,许多类似TreeGrid的jqGrid方法都将
record
作为输入参数,但您只有
rowid
。jqGrid将加载的网格项保存到本地。因此,从
rowid
获取
record
的最简单方法是使用
getLocalRow
方法

因此,
beforeselectionRow
回调的代码可能如下所示:

在选择行之前:函数(rowid,e){
变量$this=$(this),
isLeafName=$this.jqGrid(“getGridParam”、“treeReader”).leaf_字段,
localIdName=$this.jqGrid(“getGridParam”、“localReader”).id,
本地数据,
国家,,
SetchedStateofChildrenItems=函数(子项){
$。每个(子项、函数(){
$(“#”+此[localIdName]+“input.itmchk”).prop(“选中”,状态);
如果(!此[isLeafName]){
setchedstateofchildrenitems($this.jqGrid(“getNodeChildren”,this));
}
});
};
if(e.target.nodeName==“输入”&&$(e.target.hasClass(“itmchk”)){
状态=$(e.target).prop(“选中”);
localData=$this.jqGrid(“getLocalRow”,rowid);
setchedstateofchildrenitems($this.jqGrid(“getNodeChildren”,localData),state);
}
}
必须指出的是,只有在以前加载的项目上才会选中/取消选中子复选框。因为您一次加载网格的数据并使用
loaded:true
属性,所以这对您来说不是问题


相应的代码显示上述代码确实有效。这是对我在回答您之前的问题时创建的演示的修改。

非常感谢您的帮助您肯定是jqGrid的大师,因为您对它了解很多。再次感谢您与新用户分享的一切。我不会再打扰您了,但是在上面的问题之后,我没有告诉您单选按钮,它有时会根据数据库级别的值替换复选框。是否有某种方法可以测试格式化程序中另一个单元格的值,以便我可以选择要添加到单元格中的单选按钮或复选框?我认为这是初学者的水平,但我不知道我怎么能做到。再次感谢你的帮助。JiheLPlease不要花时间在我之前的评论上,我找到了一个解决方案,根据数据库中的级别值,用radiobutton替换复选框。再次感谢你的耐心。祝你过得愉快,吉尔