如何在使用内联编辑时在jqgrid中发布静态值

时间:2017-08-08 13:24:50

标签: jquery jqgrid

我想向服务器发布一个静态值,例如Custom data source Id for the uploads to be deleted. (string) 该值不是colmodel的一部分,我想在内联编辑发生时发布它,这是我的jqgrid的php文件,

<input type="hidden" name="table_name" value="<?php echo $table_name; ?>">

我可以发布colmodel值,如:

<head>
<script type="text/ecmascript" src="jq/jquery.min.js"></script>
<script type="text/ecmascript" src="jq/jquery.jqGrid.min.js"></script>
<script type="text/ecmascript" src="jq/grid.locale-en.js"></script> 
<link rel="stylesheet" type="text/css" media="screen" href="jq/jquery-ui.css"/>
<link rel="stylesheet" type="text/css" media="screen" href="jq/ui.jqgrid.css"/>
<meta charset="utf-8" />
</head>
<body>
<table id="rowed5"></table>
<script type="text/javascript"> 
var lastsel2
var mydata=<?PHP echo $json_data;?>;
jQuery("#rowed5").jqGrid({
    postData: {test_value:'<?PHP echo $table?>'},
    serializeCellData: function( post_to_server ) {
        var postParams  =  jQuery("#rowed5").jqGrid('getGridParam','postData');
        if(postParams.hasOwnProperty('test_value') ) {
            post_to_server['test_value'] = postParams.test_value;
        }
        return post_to_server;
    },
    datatype: "local",
    shrinkToFit: false,
    data: mydata,
    height: 320,
    autowidth:true,
    colNames:['RowID','status','note','Variant ID'],
    colModel:[ 
        {name:'id',index:'id', width:55, sorttype:"int",align:"center"},
        {name:'status',index:'status', width:150,align:"left", editable: true,
edittype:"select",editoptions:{value:"Exclude:Exclude"}},
        {name:'note',index:'note', width:200, sortable:false,editable: true,edittype:"textarea", editoptions:{rows:"2",cols:"10"}},
        {name:'v_id',index:'v_id', width:150,align:"left"}],
    /*onSelectRow: function(id){
        if(id && id!==lastsel2){
            jQuery('#rowed5').jqGrid('restoreRow',lastsel2);
            jQuery('#rowed5').jqGrid('editRow',id,true);
            lastsel2=id;
        }
    },*/
    editurl: "functions.php",
    cellEdit : true,
    cellsubmit : 'remote',
    cellurl : 'functions.php',
});
jQuery("#rowed5").jqGrid('filterToolbar', {stringResult: true, searchOnEnter: false, defaultSearch : "cn"});
</script>
</body>

但我想发布一个不属于colmodel的静态值。

错误     if($_POST['oper']=='edit') { $id = mysql_real_escape_string($_POST['id']); }

2 个答案:

答案 0 :(得分:1)

使用postData jqGrid参数或serailizeRowData网格参数。所有这些都描述为herehere

您可能需要查看此stackoverflow post

编辑:

在这种情况下,一种可能的解决方案是使用serializeRowData

jQuery("#rowed5").jqGrid({
    ...
    postData: {test_value:'<?PHP echo $table?>'},
    serializeRowData : function( post_to_server ) {
        var postParams  =  jQuery("#rowed5").jqGrid('getGridParam','postData');
        if(postParams.hasOwnProperty('test_value') ) {
            post_to_server['test_value'] = postParams.test_value;
        }
        return post_to_server;
    },
    datatype: "local",
    ...
 });

为了使其正常工作,请确保您的变量$ table具有值。如果这项工作是在postData对象而不是变量中设置静态值的简单测试。

jQuery("#rowed5").jqGrid({
    postData: {test_value:'mystaticvalue'},
...
});

答案 1 :(得分:1)

问题的主要原因在于我cellEdit : true 选项editRow内的onSelectRow内联编辑方法相似。 jqGrid支持三种主要的替代编辑模式:倾斜编辑,单元格编辑和表单编辑。如果您根据选项cellEdit: true启用单元格编辑,则将永远不会调用回调onSelectRow 。单元格编辑通常意味着单元格选择,而不是行选择。因此cellEdit: true的使用阻止了通常调用onSelectRow回调。免费的jqGrid 4.15.0中引入了新选项noCellSelection: true,该选项即将发布。它允许将行选择与单元格编辑相结合,但即使在editRow onSelectRow的情况下调用cellEdit: true内的noCellSelection: true也不好,因为它将取消刚开始细胞编辑。

我的简短推荐如下:您应该决定要使用哪种一个编辑模式。在使用单元格编辑(cellEdit: true)的情况下,您应删除未使用的onSelectRowserializeRowData,并添加serializeCellDatabeforeSubmitCell以扩展发布到服务器。 serializeCellData的代码可以与serializeRowData使用的代码相同。或者,回调beforeSubmitCell可以返回对象{test_value: postParams.test_value}{}。从beforeSubmitCell返回的对象将与单元格编辑的标准参数组合(扩展)(请参阅the old documentation)。