在jqGrid中的serializeRowData之后触发了哪个事件?

时间:2015-04-18 09:59:28

标签: jquery jqgrid mvcjqgrid

我在页面上有两个jqGrids。我们的想法是在更新下拉值时显示确认对话框,当用户按Enter键保存记录时,jqGrids都会重新加载。

这是我的专栏模型:

{
    key: false, name: 'InterestedValue', index: 'InterestedValue', editable: true,
    sortable: false, formatter: 'select', width: '120px', search: false,
    edittype: 'select',
    editoptions: {
        value: InterestedStatusList,
        //afterSaveCell: function (rowid, cellname, value, iRow, iCol) {
        //    alert("after savecell" + rowid + " cellname= " + cellname);
        //    //$(this).trigger('reloadGrid');
        //},
        successfunc: function (response) {
            alert("success");
            //FLAG = true;
            $(this).trigger('reloadGrid')
            return true;
        }

    }
},

事件,

serializeRowData: function (postdata) {
   var response = JSON.stringify(postdata);
   var s = '';
   $(postdata).each(function (index, data) {
       //s += '<option value="' + index + '">' + data + '</option>';
       $.each(data, function (k, v) {
           if(k=="InterestedValue")
            s += v;//'<option value="' + k + '">' + v + '</option>';
       });

   });
   //
   if (s == "2_1") {
       if (confirm('Are you sure you want to deactivate this record? ')) {
           // do things if OK
           return postdata;
       }
       else
           return false;
   }
   return postdata;
},

我能够在serializeRowData事件后获取使用数据调用的编辑操作方法。但我无法弄清楚如何在更新完成后成功触发网格的重新加载。所以请告诉我serializeRowData之后哪个事件被解雇了。我也尝试了列中的successfunc,但是当我单击该行并进入编辑模式时,会立即触发。

2 个答案:

答案 0 :(得分:0)

如果用户选择“危险”值,则可以考虑显示确认对话框,将值发送到服务器之前。要实现这一点,您可以使用

{
    name: 'InterestedValue', ...
    edittype: 'select',
    editoptions: {
        value: InterestedStatusList,
        dataEvents: [
            {
                type: 'change',
                fn: function () {
                    var newValue = $(this).val();
                    if (newValue === "2_1" && !confirm('Are you sure you want to deactivate this record?')) {
                        $(this).val("2_0"); // set some another value
                    }
                }
            }
        ]
    }
}

或者您可以使用内嵌编辑的beforeEditRow回调,但 指定的确切位置取决于您如何使用内联编辑(直接调用) editRow的使用,inlineNav的使用,formatter: "actions"或其他的使用)以及jqGrid的版本(直到版本4.7),free jqGrid(请参阅readme您使用的{}和wiki)或Guriddo jqGrid JS

答案 1 :(得分:0)

感谢@Oleg。

的详细信息

我之前发布的 serializeRowData 方法能够在取消激活记录之前为用户提供JavaScript确认对话框。这是我在服务器上完成更新后如何重新加载jqGrids的方法。

我使用了editRow

$(gridId).jqGrid("editRow", 'kkk', true, '', '', '', '', reload)

在重载方法中,我触发了将jqGrids重新加载为

function reload(rowid, result) {
var s = '';
var o = false;
var postdata = JSON.stringify(result);
$(jQuery.parseJSON(postdata)).each(function (index, data) {
    $.each(data, function (k, v) {
        s += k + ":" + v + " --- ";
        if (k == "responseText")
        {
            if (v.indexOf("Deactivated") != -1)
                o = true;
        }
        s += k + ":" + v + " --- ";
    });

});

if (o ==true) {
    //reload both grids
    $("#grid1").trigger("reloadGrid");
    $("#grid2").trigger("reloadGrid");
}  }

希望有所帮助。