我是jqGrid的新手,我已经创建了一个简单的网格,其中包含本地数据,并将editurl设置为clientArray。我正在使用内联导航。我可以编辑一行,当我按下保存按钮时,这些行就会更新。到目前一切尚好。
当我按下add row按钮时,一个新的空行被插入。当我在那里输入一些数据并单击保存按钮时,我得到了错误消息:
Uncaught TypeError: Cannot read property 'extraparam' of undefined jquery.jqGrid.min.js:398
文档只说明了应该如何调用saveRow方法。但是,显然内联导航器会自动调用它。这太完美了。但是我想我仍然需要正确地设置一些参数,这样它就不会抛出错误并保存新添加的行。
希望一些jqGrid专家有一个很好的建议。谢谢。
function createTable(data,colNames,colModel,caption ){
...
$(table).jqGrid({ data:data,
datatype: "local",
height: 'auto',
colNames:colNames,
pager:'#'+pagerid,
colModel:colModel,
viewrecords: true,
caption:caption,
editurl:'clientArray',
});
var nav = $(table).jqGrid('navGrid','#'+pagerid,{edit:false,add:false,del:false});
$(table).jqGrid('inlineNav','#'+pagerid);
$(table).jqGrid('gridResize',{minWidth:350,maxWidth:800,minHeight:80, maxHeight:350});
$('#gbox_'+tableid).draggable();
}发布于 2013-04-19 14:44:06
if(!o.addParams.addRowParams.extraparam) {
o.addParams.addRowParams.extraparam = {};
}使用o.addParams.addRowParams.extraparam,但addParams (请参阅here)的参数的默认值定义为addParams : {},而不是addParams : {addRowParams: {}}。因此,表达式o.addParams.addRowParams等于undefined,o.addParams.addRowParams.extraparam与undefined.extraparam相同,这会产生空引用异常。
我在trirand上发布了the corresponding bug report,这个问题将在下一个版本的jqGrid中得到解决。
作为一种解决办法,您可以替换以下行
$(table).jqGrid('inlineNav','#'+pagerid);用这条线
$(table).jqGrid('inlineNav','#'+pagerid, {addParams: {addRowParams: {}}});代码中一些常见的附加说明:
gridview: true选项,这将在没有任何disadvantagesautoencode: true选项。因此,如果您试图显示像a < b这样的数据,您可能会遇到问题,因为<是HTML语言中的特殊字符。如果你想使用autoencode: true选项,输入数据将被解释为文本而不是HTML片段。index属性,如果你总是为index和name分配相同的值,properties.id属性。如果您从服务器获取数据,并且数据具有来自数据库的原生唯一id,则建议使用该值作为id属性的值。如果您在页面上使用多个jqGrids,并且没有提供唯一的HTML值,则会有重复的id,这是id错误。idPrefix选项。如果你在页面上有两个网格,并且你没有为数据项填充(也不需要)任何id,那么你就有了重复的id (两个网格中的id=“1”,id="2“等等)。如果您要为一个网格定义idPrefix: "g1_",为另一个网格定义idPrefix: "g2_"选项,那么第一个网格的rowids将在第一个网格中为id="g1_1",id="g1_2“等,在第二个网格中为id="g2_1",id="g2_2”。即使您从服务器填充id,然后在一个表中提供唯一的id,但是来自数据库的两个表的id可以具有相同的id。因此,为每个网格使用不同的idPrefix选项将以非常简单的方式解决id重复的问题。发布于 2013-05-11 02:19:51
我遇到了同样的问题,但我的jqgrid标记完全不同(也许是更新的版本?)
我可以使用内联来编辑和保存行,但添加行不会保存。我不确定问题出在哪里。
<?php
ini_set("display_errors","1");
require_once 'jq-config.php';
// include the jqGrid Class
require_once ABSPATH."php/jqAutocomplete.php";
require_once ABSPATH."php/jqCalendar.php";
require_once ABSPATH."php/jqGrid.php";
// include the driver class
require_once ABSPATH."php/jqGridPdo.php";
// Connection to the server
$conn = new PDO(DB_DSN,DB_USER,DB_PASSWORD);
// Tell the db that we use utf-8
$conn->query("SET NAMES utf8");
// Create the jqGrid instance
$grid = new jqGridRender($conn);
// Write the SQL Query
$grid->SelectCommand = 'SELECT Serial, Type, Customer, Date, Notes FROM rmas';
$resize = <<<RESIZE
jQuery(window).resize(function(){
gridId = "grid";
gridParentWidth = $('#gbox_' + gridId).parent().width();
$('#' + gridId).jqGrid('setGridWidth',gridParentWidth);
})
RESIZE;
$grid->setJSCode( $resize);
// set the ouput format to json
$grid->dataType = 'json';
$grid->table ="rmas";
$grid->setPrimaryKeyId("Serial");
// Let the grid create the model
$grid->setColModel();
// Set the url from where we obtain the data
$grid->setUrl('rmaform.php');
$grid->cacheCount = true;
//$grid->toolbarfilter = true;
$grid->setGridOptions(array(
"caption"=>"RMAs",
"rowNum"=>50,
"sortname"=>"Serial",
"hoverrows"=>true,
"rowList"=>array(50,100,200),
"height"=>600,
"autowidth"=>true,
"shrinkToFit"=>false
));
$grid->callGridMethod('#grid', 'bindKeys');
// Change some property of the field(s)
$grid->setColProperty("Serial", array("align"=>"center","width"=>40));
$grid->setColProperty("Type", array("align"=>"center","width"=>40));
$grid->setColProperty("Customer", array("align"=>"center","width"=>65));
$grid->setColProperty("Date", array("align"=>"center","width"=>40));
$grid->setColProperty("Notes", array("align"=>"left","width"=>500));
// navigator first should be enabled
$grid->navigator = true;
$grid->setNavOptions('navigator', array("add"=>false,"edit"=>false,"excel"=>true));
// and just enable the inline
$grid->inlineNav = true;
$buttonoptions = array("#pager", array(
"caption"=>"Enable Cells",
"onClickButton"=>"js:function(){ jQuery('#grid').jqGrid('setGridParam',{cellEdit: true});}", "title"=> "Enable Excel like editing"
)
);
$grid->callGridMethod("#grid", "navButtonAdd", $buttonoptions);
$buttonoptions = array("#pager", array(
"caption"=>"Disable Cells",
"onClickButton"=>"js:function(){ jQuery('#grid').jqGrid('setGridParam',{cellEdit: false});}" , "title"=> "Disable Excel like editing"
)
);
$grid->callGridMethod("#grid", "navButtonAdd", $buttonoptions);
$grid->renderGrid('#grid','#pager',true, null, null, true,true);
$conn = null;
?>https://stackoverflow.com/questions/16096317
复制相似问题