Javascript 如何为jqGird中的列赋值?
我将jqGrid与CodeIgniter 2.1.0一起使用。 让我烦恼的是如何为特定事件的特定列赋值 假设我在列值中输入数量和费率…当我从“费率”字段中丢失焦点时…应计算净金额并在金额字段中显示 我需要做的是将计算值分配给金额字段……但我不知道该怎么做 我所做的工作如下:Javascript 如何为jqGird中的列赋值?,javascript,codeigniter,jquery,jqgrid,Javascript,Codeigniter,Jquery,Jqgrid,我将jqGrid与CodeIgniter 2.1.0一起使用。 让我烦恼的是如何为特定事件的特定列赋值 假设我在列值中输入数量和费率…当我从“费率”字段中丢失焦点时…应计算净金额并在金额字段中显示 我需要做的是将计算值分配给金额字段……但我不知道该怎么做 我所做的工作如下: var selIRow = 1; var rowid=''; var iCol=''; $("#purchasedetailsgrid").jqGrid({ url: sitepath + 'purchase/pur
var selIRow = 1;
var rowid='';
var iCol='';
$("#purchasedetailsgrid").jqGrid({
url: sitepath + 'purchase/purchase_grid',
datatype: 'json',
mtype: 'POST',
height:220,
width:500,
colNames:["","","Store Name","Item Name","Inner Pkg.","Outer Pkg.","Qty","Rate","Amount"],
colModel:[
{name: 'storeID_hidden_field', index:'storeID_hidden_field',hidden: true, editable: true,edittype: 'text',editrules: {edithidden:true}},
{name: 'itemID_hidden_field', index:'itemID_hidden_field',hidden: true, editable: true,edittype: 'text',editrules: {edithidden:true}},
{name:'store_id', index:'store_id',width:150,search:false,editable:true,editrules:{number:false,maxlength:10}},
{name:'item_id', index:'item_id',width:150,search:false,editable:true,editrules:{number:false,maxlength:10}},
{name:'inner_pkg', index:'inner_pkg',width:150,search:false,editable:true,editrules:{number:true,maxlength:5}},
{name:'outer_pkg', index:'outer_pkg',width:150,search:false,editable:true,editrules:{number:true,maxlength:5}},
{name:'qty', index:'qty',editable:true,width:85,search:false,editrules:{number:true,maxlength:5}},
{name:'rate', index:'rate',width:100,editable:true,search:false,editrules:{number:true,maxlength:10},
editoptions: {
dataInit: function (elem) { $(elem).focus(function () { this.select(); }) },
dataEvents: [
{
type: 'keydown',
fn: function (e) {
var key = e.charCode || e.keyCode;
if (key == 9)//tab
{
$('#amount').val();//here in val() i need to write the value of qty and rate field
}
}
}
]
}
},
{name:'amount', index:'amount',width:100,editable:true,search:false,editrules:{number:true,maxlength:10},
editoptions: {
dataInit: function (elem) { $(elem).focus(function () { this.select(); }) },
dataEvents: [
{
type: 'keydown',
fn: function (e) {
var key = e.charCode || e.keyCode;
if (key == 13)//enter
{
var grid = $('#purchasedetailsgrid');
//Save editing for current row
grid.jqGrid('saveRow', selIRow, false, sitepath + 'purchase/purchase_grid');
selIRow++;
//If at bottom of grid, create new row
//if (selIRow++ == grid.getDataIDs().length) {
grid.addRowData(selIRow, {});
//}
//Enter edit row for next row in grid
grid.jqGrid('editRow', selIRow, false, sitepath + 'purchase/purchase_grid');
}
}
}
]
}
}
],
pager: '#purchasedetailstoolbar',
rowNum:10,
rowList:[10,20,30],
sortname: 'inventory_id',
sortorder: 'desc',
viewrecords: true,
rownumbers: true,
gridview: true,
multiselect: false,
autoresize:true,
autowidth: true,
editurl: sitepath + 'purchase/purchase_grid',
toolbar: [true,"top"],
gridComplete: function ()
{
var grid = jQuery("#purchasedetailsgrid");
var ids = grid.jqGrid('getDataIDs');
if(ids == '')
{
grid.addRowData(selIRow, {});
grid.jqGrid('editRow', selIRow, false, sitepath + 'purchase/purchase_grid');
}
for (var i = 0; i < ids.length; i++)
{
}
},
caption: 'Purchase List',
});
jQuery("#purchasedetailsgrid").jqGrid('navGrid','#purchasedetailstoolbar',{view:false,edit:false,add:false,del:false,search: false});
jQuery("#purchasedetailsgrid").jqGrid('inlineNav','#purchasedetailstoolbar');
jQuery("#purchasedetailsgrid").jqGrid('filterToolbar',{stringResult:false,searchOnEnter : false},{autosearch: true});
var temp_purchase = $("#purchasedetailsgrid_header").html();
$("#t_purchasedetailsgrid").html(temp_purchase);
$("#refresh_purchasedetailsgrid").attr('title',"Reload Grid");
var selIRow=1;
var rowid='';
var-iCol='';
$(“#purchasedetailsgrid”).jqGrid({
url:sitepath+“采购/采购网格”,
数据类型:“json”,
mtype:“POST”,
身高:220,
宽度:500,
colNames:[“”、“”、“”商店名称“、”商品名称“、”内包装“、”外包装“、”数量“、”价格“、”金额“],
colModel:[
{name:'storeID_hidden_field',index:'storeID_hidden_field',hidden:true,edittype:'text',editrules:{edithidden:true},
{name:'itemID_hidden_field',index:'itemID_hidden_field',hidden:true,edittype:'text',editrules:{edithidden:true},
{名称:'store_id',索引:'store_id',宽度:150,搜索:false,可编辑:true,编辑规则:{number:false,maxlength:10}},
{name:'item_id',index:'item_id',宽度:150,搜索:false,可编辑:true,编辑规则:{number:false,maxlength:10},
{name:'internal_-pkg',index:'internal_-pkg',width:150,search:false,edit:true,editrules:{number:true,maxlength:5},
{name:'outer_pkg',index:'outer_pkg',宽度:150,搜索:false,可编辑:true,编辑规则:{number:true,maxlength:5}},
{name:'qty',index:'qty',editable:true,width:85,search:false,editrules:{number:true,maxlength:5},
{name:'rate',index:'rate',width:100,可编辑:true,search:false,editrules:{number:true,maxlength:10},
编辑选项:{
dataInit:function(elem){$(elem).focus(function(){this.select();})},
数据事件:[
{
键入:“keydown”,
fn:功能(e){
var key=e.charCode | | e.keyCode;
if(key==9)//制表符
{
$('#amount').val();//在val()中,我需要写入qty和rate字段的值
}
}
}
]
}
},
{name:'amount',index:'amount',width:100,可编辑:true,search:false,editrules:{number:true,maxlength:10},
编辑选项:{
dataInit:function(elem){$(elem).focus(function(){this.select();})},
数据事件:[
{
键入:“keydown”,
fn:功能(e){
var key=e.charCode | | e.keyCode;
if(key==13)//输入
{
变量网格=$('purchasedetailsgrid');
//保存当前行的编辑
jqGrid('saveRow',selIRow,false,sitepath+'purchase/purchase_grid');
selIRow++;
//若位于网格底部,则创建新行
//if(selIRow++==grid.getDataIDs().length){
addRowData(selIRow,{});
//}
//为网格中的下一行输入“编辑行”
jqGrid('editRow',selIRow,false,sitepath+'purchase/purchase_grid');
}
}
}
]
}
}
],
寻呼机:“#purchasedetailstoolbar”,
rowNum:10,
行列表:[10,20,30],
sortname:“库存\u id”,
排序器:“desc”,
viewrecords:是的,
行数:对,
gridview:没错,
多选:错,
自动调整大小:正确,
自动宽度:正确,
editurl:sitepath+“采购/采购网格”,
工具栏:[正确,“顶部”],
gridComplete:函数()
{
var grid=jQuery(“#purchasedetailsgrid”);
var id=grid.jqGrid('getdataid');
如果(ID='')
{
addRowData(selIRow,{});
jqGrid('editRow',selIRow,false,sitepath+'purchase/purchase_grid');
}
对于(变量i=0;i
现在,有人能建议我如何从一列中获取值并将其分配给另一列吗
如有任何建议,将不胜感激
Thnx提前您当前的代码有很多问题。例如,您写道需要根据数量和费率计算金额,但您在“费率”和“金额”列中定义了一些
dataEvents
,而不是在“数量”和“费率”列中定义。下一个问题是直接在gridComplete
中使用editRow
方法。因此,InlineAV工具栏中的按钮将保持错误状态。还有一个问题是,您需要根据“数量”和“费率”重新计算“金额”,这不仅是因为“数量”和“费率”失去了焦点,而且是因为在输入时保存了值
为了使以上问题的解决更容易,我写了一篇文章,你可以根据你的具体要求修改它。最重要的p
var editingRowId = undefined,
recomputeAmount = function () {
var rate = $("#" + editingRowId + "_rate").val(),
qty = $("#" + editingRowId + "_qty").val(),
newAmount = parseFloat(rate) * parseFloat(qty);
$("#" + editingRowId + "_amount").val(isFinite(newAmount) ? newAmount : 0);
},
myEditParam = {
keys: true,
oneditfunc: function (id) {
editingRowId = id;
},
afterrestorefunc: function (id) {
editingRowId = undefined;
},
aftersavefunc: function (id) {
var $this = $(this),
rate = $this.jqGrid("getCell", id, "rate"),
qty = $this.jqGrid("getCell", id, "qty"),
newAmount = parseFloat(rate) * parseFloat(qty);
$this.jqGrid("setCell", id, "amount", newAmount);
editingRowId = undefined;
}
},
numInput = {
type: 'keydown',
fn: function (e) {
var key = e.which;
// allow only '0' <= key <= '9' or key = '.', Enter, Tab, Esc
if ((key < 48 || key > 57) && key !== $.ui.keyCode.PERIOD &&
key !== $.ui.keyCode.TAB && key !== $.ui.keyCode.ENTER && key !== $.ui.keyCode.ESCAPE) {
return false;
}
}
},
recompute = {
type: 'focusout',
fn: function (e) {
recomputeAmount();
}
};
$("#purchasedetailsgrid").jqGrid({
colModel: [
...
{name:'qty', index:'qty',editable:true,width:85,search:false,editrules:{number:true,maxlength:5},
editoptions: {
dataInit: function (elem) { $(elem).focus(function () { this.select(); }) },
dataEvents: [ numInput, recompute ]
}
},
{name:'rate', index:'rate',width:100,editable:true,search:false,editrules:{number:true,maxlength:10},
editoptions: {
dataInit: function (elem) { $(elem).focus(function () { this.select(); }) },
dataEvents: [ numInput, recompute ]
}
},
{name:'amount', index:'amount',width:100,editable:true,search:false,editrules:{number:true,maxlength:10}}
],
loadComplete: function () {
var gridIdSelector = '#' + $.jgrid.jqID(this.id);
if (this.rows.length > 1) {
//$(this).jqGrid('editRow', this.rows[1].id, myEditParam);
$(this).jqGrid('setSelection', this.rows[1].id, true);
setTimeout(function() {
// we should simulate click of the button not after the grid is loaded, but
// after the toolbar with the cliked button will be created by inlineNav
$(gridIdSelector + "_iledit").click();
}, 100);
} else {
setTimeout(function() {
// we should simulate click of the button not after the grid is loaded, but
// after the toolbar with the cliked button will be created by inlineNav
$(gridIdSelector + "_iladd").click();
}, 100);
}
}
});
jQuery("#purchasedetailsgrid").jqGrid('navGrid','#purchasedetailstoolbar',
{view:false,edit:false,add:false,del:false,search: false, refreshtitle: "Reload Grid"});
jQuery("#purchasedetailsgrid").jqGrid('inlineNav','#purchasedetailstoolbar',
{edit: true, add: true, editParams: myEditParam, addParams: {addRowParams: myEditParam}});