通过setGridParam()设置jqGrid编辑选项

时间:2011-02-14 19:47:57

标签: jquery jqgrid

我需要在初始化网格后为jqGrid的编辑事件设置一些事件处理程序。也就是说,我需要处理beforeShowForm编辑事件。我使用setGridParam尝试了这个,但它似乎没有做任何事情。

$('#mygrid').jqGrid('setGridParam', {
    edit: {
        beforeShowForm: function(formid) {
            // handle event
        }
    }
});

jqGrid的documentation关于如何设置这些选项的信息量不足。我该如何设置这些事后呢?我知道你可以通过jqgrid()的第二个参数来设置它。我只需要在创建它之后再这样做。

2 个答案:

答案 0 :(得分:3)

您可以轻松更改编辑事件的参数,因为参数保存在navGrid函数的内部变量中。因此,您应该将click事件解除绑定到“编辑”按钮,并将调用editGridRow方法的新事件绑定到您需要的所有新参数。新参数可以包括beforeShowForm等事件处理程序。

相应的代码可以是以下内容:

var grid=$("#list");      // your jqGrid (the <table> element)
var grid_id = grid[0].id; // id of the <table> element like "list"
$("#edit_"+grid_id).unbind('click'); // unbind original 'click' handle
$("#edit_"+grid_id).click(function() {
    if (!$(this).hasClass('ui-state-disabled')) {
        var sr = grid[0].p.selrow;  // get id of selected row
        if (sr) {
            grid.jqGrid("editGridRow",sr,
                        { // here you should place all Edit parameters
                            beforeShowForm: function(formid) {
                                alert("In beforeShowForm()");
                            }
                        });
        } else {
            // display error message
            $.jgrid.viewModal("#alertmod",{gbox:"#gbox_"+grid_id,jqm:true});
            $("#jqg_alrt").focus();
        }
    }
    return false;
});

更新:如果您直接调用某处editGridRow方法而无法更改您可以执行的代码

var grid=$("#list");      // your jqGrid (the <table> element)
var orgEditGridRow = grid.jqGrid.editGridRow; // save original function
$.jgrid.extend ({editGridRow : function(rowid, p){
    $.extend(p,
             { // modify some parameters of editGridRow
                 beforeShowForm: function(formid) {
                     alert("In new beforeShowForm()");
                 }
             });
    orgEditGridRow.call (this,rowid, p);
}});

答案 1 :(得分:-1)

我知道这有点晚了,但我遇到了同样的问题。在查看jqGrid源代码后,我就是这样做的:

$.extend($.jgrid.edit, { beforeShowForm: function (frmmgr) {
    alert('insert code here');
}
});