Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery jqGrid复选框未保存_Jquery_Checkbox_Jqgrid - Fatal编程技术网

Jquery jqGrid复选框未保存

Jquery jqGrid复选框未保存,jquery,checkbox,jqgrid,Jquery,Checkbox,Jqgrid,我有一个jqGrid,它有一个包含复选框的列。我注意到,当用户切换复选框时,jqGrid实际上不会将行置于编辑模式。因此,当用户单击save按钮时,复选框的新值不会被保存 这是jgGrid中复选框的默认行为吗?让jqGrid保存复选框值的最佳方法是什么 以下是jqGrid代码: var myGrid = jQuery("#myGrid"); myGrid.jqGrid({ editurl: 'UpdateData', datatype: function (postdata)

我有一个jqGrid,它有一个包含复选框的列。我注意到,当用户切换复选框时,jqGrid实际上不会将行置于编辑模式。因此,当用户单击save按钮时,复选框的新值不会被保存

这是jgGrid中复选框的默认行为吗?让jqGrid保存复选框值的最佳方法是什么

以下是jqGrid代码:

var myGrid = jQuery("#myGrid");

myGrid.jqGrid({
    editurl: 'UpdateData',
    datatype: function (postdata) {
        //some code
    },
    height: "450",
    footerrow: false,
    userDataOnFooter: false,
    autowidth: true,
    viewrecords: true,
    rowNum: 100,
    rowList: [25, 50, 100, 200, 300, 400, 500, 1000],
    sortname: 'SomeId',
    pager: '#footer',
    caption: "",
    colNames: ['Field1', 'Field2'],
    colModel: [
        { name: 'Col1', index: 'Col1', hidden: false, editable: true, sortable: true, search: true },
        { name: 'MyCheckBox', index: 'MyCheckBox', hidden: false, editable: true, edittype: 'checkbox', editoptions: { value: "True:False" }, formatter: "checkbox", formatoptions: { disabled: false }, search: true }
    ],
    onSelectRow: function (index) {
        myGrid.jqGrid('editRow', index, true);
    }
});

myGrid.jqGrid('navGrid', '#footer',
    { edit: false, add: false, del: false, search: false },
    { closeAfterAdd: true }, // use default settings for edit
    { closeAfterAdd: true, left: ((document.body.clientWidth / 2) - 100), top: ((document.body.clientHeight / 2) - 50) }, // use default settings for add
    { },  // delete instead that del:false we need this
    { multipleSearch: false }, // enable the advanced searching
    { closeOnEscape: true} /* allow the view dialog to be closed when user press ESC key*/
);

myGrid.jqGrid('navButtonAdd', '#footer',
{
    buttonicon: "none",
    caption: "Save",
    onClickButton: function () {
        //save the currently selected row
    }
})
我正在考虑使用jQuery为每个复选框附加一个“更改”处理程序,当用户单击复选框时,该处理程序会将该行置于编辑模式。看起来像是一个黑客,但我不知道如何正确识别网格中的复选框列(我的示例只显示了一个复选框,但网格实际上有两个)


jqGrid支持比这更好的复选框行为吗?

我觉得您现在明白了,您最初的假设是,如果使用选项
formatoptions:{disabled:false}
初始化,那么
格式化程序:“checkbox”
使用内联编辑是错误的。jqGrid支持独立于树的编辑模式:单元编辑、内联编辑和表单编辑

格式化只是显示输入数据值的表单。例如,可以将
0
1
(或
true
false
)值显示为
Yes
No
,或显示为选中按钮或未选中按钮,或显示为两个不同的图像,或显示为绿色和红色的单元格或。。。所以格式化程序的目标是构造HTML片段,这些片段将被放置在相应列的单元格中

特别是在使用
formatter:“checkbox”的情况下,formattoptions:{disabled:false}
应该实现
单击
句柄,该句柄将执行一些附加操作,在更改复选框状态时,您需要执行这些操作。在我看来,这种行为的最佳实现可以使用
beforeselectionRow
callback编写。创建用于显示在使用
数据类型时可以执行的操作:“本地”
。在这种情况下,存在保存数据的内部参数
\u index
data
。如果使用另一个
数据类型
值,则有许多实现选项。例如,您可以执行几乎相同的操作,但在自定义数组或对象中保存复选框的更改状态。我建议您阅读和了解更多信息

关于您发布的代码的一些常见评论。如果您在内部使用
jQuery.ajax
,我强烈建议您避免使用定义为函数的
datatype
。这是局部错误的根源。jqGrid提供了许多选项,允许您自定义
jQuery.ajax
,在使用
datatype:“json”
datatype:“xml”
的情况下,jqGrid本身就是这样。有
beforeProcessing
回调,
ajaxGridOptions
选项,
jsonReader
可以使用函数(请参阅),
colModel
中的
jsonmap
属性,也可以是函数等等。我建议您改用这些功能


此外,我建议您在网格中添加
gridview:true
(请参阅)和
autoencode:true
选项,并从
colModel
中删除不需要的
索引
属性和默认值为
隐藏:false
可排序:true
搜索:true
。严格建议在输入数据中填写
id
(rowid),或者在某些列中使用
key:true
,如果该列已经包含唯一的id值。

感谢您的详细和深思熟虑的回答。不幸的是,我没有足够的jqGrid经验来理解你所说的一切。此时,我可能只会使用formatoptions:{disabled:true}并强制用户在选中框之前将行置于编辑模式。如果选中该框本身可以将行置于编辑模式,那就太好了,但它显然不是这样工作的。@不客气!如果您在jqGrid中填充不确定的内容,那么删除
格式选项:{disabled:true}
可能是最佳选择。在任何情况下,使用简单选项
gridview:true、autoencode:true
都是不错的选择。您应该考虑删除异类<代码>数据类型:函数< />代码,使用标准<代码>数据类型>代码>值。是的,这是我继承的一个项目,我不确定为什么它会设置它的方式。数据类型函数在我看来总是很奇怪,所以你说这是个坏主意我并不感到奇怪。不幸的是,有几十个网格,它们都是这样工作的。也许有一天我会改变它。