开发者

Set jqGrid edit options via setGridParam()

I need to set some event handlers for jqGrid's edit events after the grid has been initialized. Namely, I need to handle the beforeShowForm edit event. I have tried this using setGridParam but it doesn't seem to be doing anything.

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

jqGrid's documentation is less than informative as to how these options are supposed to be s开发者_如何学运维et. How am I supposed to set these after-the-fact? I am aware that you can set this via the second argument for jqgrid(). I just need to do this after it has been created.


You can not so easy to change parameters of edit events because the parameters are saved in internal variable of navGrid function. So you should unbind the click event to the "Edit" button and bind the new one event which call editGridRow method with all new parameters which you need. The new parameters can include event handler like beforeShowForm.

The corresponding code can be about the following:

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;
});

UPDATED: If you call somewhere editGridRow method directly and can not change the code you can make following

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);
}});


I know that this is a little late, but I ran into the same problem. After looking at the jqGrid source, here is what I did:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜