2017-03-08 50 views
0

我正在使用jqGrid将Json对象转换为常规HTML表格。从服务器我得到的对象,除了一件事情,一切都很好。我添加了一个实际上是复选框列的列。在每个复选框输入的值属性中,如果复选框被选中,我会将ID传递回服务器。jqGrid随机抽取复选框列

$("#membersGrid").jqGrid({ 
    url: '/Member/GetAllMembers', 
    mtype: "GET", 
    styleUI: 'Bootstrap', 
    datatype: "json", 
    colModel: [ 
     { label: 'Full Name', name: 'fullName', width: 150 }, 
     { 
      label: 'Select', editable: true, name: 'id', 
      edittype: 'checkbox', editoptions: { value: "true:false", defaultValue: "false" }, 
      formatter: "checkbox", formatoptions: { disabled: false }, width: 45 
     } 
    ], 
    viewrecords: true, 
    height: 250, 
    width: 640, 
    rowNum: -1, 
    ajaxSubgridOptions: { async: false }, 
}); 

当我定义真或假,并用默认值我想指出,假(未选中)为每个默认值,并用每复选框产生的细胞值产生复选框列。

但相反我得到随机托运的复选框:

enter image description here

当我在Chrome检查元素,未经检查的类型用这种方式自动生成:

<td role="gridcell" style="" title="" aria-describedby="membersGrid_id"> 
    <input type="checkbox" value="400" offval="no"> 
</td> 

,并检查型像这样:

<td role="gridcell" style="" title="" aria-describedby="membersGrid_id"> 
    <input type="checkbox" checked="checked" value="399" offval="no"> 
</td> 

有没有其他方法可以告诉jqGrid避免使用defaultValue属性检查复选框?或者我做错了什么?

+0

看来你使用商业[Guriddo jqGrid JS](http://guriddo.net/?page_id=103334)。我无法帮助您,但我建议您尝试使用[免费jqGrid](https://github.com/free-jqgrid/jqGrid)fork,这是我开发的。您需要将'styleUI:'Bootstrap''参数更改为'guiStyle:“bootstrap”'(或'guiStyle:“bootstrapPrimary”')(请参阅[文章](https://free-jqgrid.github.io/getting -started/index.html#bootstrap))并修改用于将jqGrid文件加载到CDN URL的URL(请参阅[Wiki文章](https://github.com/free-jqgrid/jqGrid/wiki/Access- free-jqGrid-from-different-CDNs)) – Oleg

+0

如果免费的jqGrid 4.14.0中存在相同的问题,那么我需要从服务器返回的测试JSON数据('/ Member/GetAllMembers')才能够重现问题。 – Oleg

+0

@Oleg感谢您的回复。我注意到一个有趣的事实。当我删除名称:基本上定义复选框的值属性的'id'属性时,所有复选框都未选中。当我将它归还时,它会再次进行随机检查。我不确定如果复选框被选中,名称属性会如何影响... –

回答

1

我认为存在关于formatter: "checkbox"的使用的误解。它将输入值truefalse显示为复选框的选中/未选中状态。输入数据的属性id将用作rowid:行的id属性的值(网格的<tr>元素)。

因此,我建议您更改name或将保留复选框的列。你的主要问题应该被修正。我建议你小心使用formatter: "checkbox", formatoptions: { disabled: false }。 jqGrid支持三种编辑模式:单元格编辑,内联编辑和表单编辑,允许修改jqGrid的本地数据。此外,您目前不使用loadonce: true选项。因此根本不会创建本地数据:只有HTML表格中的数据将保存从服务器返回的信息。复选框formatter: "checkbox", formatoptions: { disabled: false }的更改将不会被跟踪,您可能在读取数据时遇到问题。全部取决于如何您读取复选框的数据... The demo,我为the answer创建,显示如何修改本地 jqGrid的数据,以便保存复选框的状态。