如何在内联编辑时获取jqGrid单元格值(getcell和getRowData返回单元格内容而不是输入元素的实际值)。
答案 0 :(得分:17)
获取具有给定行ID和单元格ID的单元格值的常规函数
在你的js代码函数中创建:
function getCellValue(rowId, cellId) {
var cell = jQuery('#' + rowId + '_' + cellId);
var val = cell.val();
return val;
}
使用示例:
var clientId = getCellValue(15, 'clientId');
狡猾,但有效。
答案 1 :(得分:15)
以下是具有用户功能的基本解决方案示例。
ondblClickRow: function(rowid) {
var cont = $('#grid').getCell(rowid, 'MyCol');
var val = getCellValue(cont);
}
...
function getCellValue(content) {
var k1 = content.indexOf(' value=', 0);
var k2 = content.indexOf(' name=', k1);
var val = '';
if (k1 > 0) {
val = content.substr(k1 + 7, k2 - k1 - 6);
}
return val;
}
答案 2 :(得分:6)
经过几个小时的哀悼,我发现这是最简单的解决方案。在获取行数据之前调用它:
$('#yourgrid').jqGrid("editCell", 0, 0, false);
它将保存当前编辑,如果网格中没有行,则不会抛出。
答案 3 :(得分:4)
如你所述,according to the jqGrid documentation代表getCell和getRowData:
编辑行或单元格时,请勿使用此方法。这将返回单元格内容,而不是输入元素的实际值
由于这些方法都不会直接返回您的数据,因此您必须使用它们返回单元格内容本身,然后使用jQuery解析它。如果jqGrid的未来版本可以提供一种方法来进行一些解析本身,和/或提供一个API以使其更简单,那将是很好的。但另一方面,这真的是一个经常出现的用例吗?
或者,如果您可以更详细地解释原始问题,可能还有其他选择。
答案 4 :(得分:4)
试试这个,它会给你特定列的值
onSelectRow: function(id) {
var rowData = jQuery(this).getRowData(id);
var temp= rowData['name'];//replace name with you column
alert(temp);
}
答案 5 :(得分:2)
基本上,您必须在访问单元格内容之前保存该行。
如果这样做,则获得单元格的值,而不是单元格处于编辑模式时出现的标记。
jQuery.each(selectedRows, function(index, foodId) {
// save the row on the grid in 'client array', I.E. without a server post
$("#favoritesTable").saveRow(foodId, false, 'clientArray');
// longhand, get grid row based on the id
var gridRow = $("#favoritesTable").getRowData(foodId);
// reference the value from the editable cell
foodData += foodId + ":" + gridRow['ServingsConsumed'] + ',';
});
答案 6 :(得分:2)
嗨,我也遇到了这个问题。最后我通过jQuery解决了这个问题。但答案与网格本身有关,而不是常见的网格。希望它有所帮助。
我的解决方案是这样的:
var userIDContent = $("#grid").getCell(id,"userID"); // Use getCell to get the content
//alert("userID:" +userID); // you can see the content here.
//Use jQuery to create this element and then get the required value.
var userID = $(userIDContent).val(); // var userID = $(userIDContent).attr('attrName');
答案 7 :(得分:1)
在grid.php中编写非常简单的代码并将值传递给另一个page.php
通过这种方式,您可以获得其他列单元格vaue
但是任何人都可以在花式框或clor框中创建一个类似window.open(传递值的路径....)?
$custom = <<<CUSTOM
jQuery("#getselected").click(function(){
var selr = jQuery('#grid').jqGrid('getGridParam','selrow');
var kelr = jQuery('#grid').jqGrid('getCell', selr, 'stu_regno');
var belr = jQuery('#grid').jqGrid('getCell', selr, 'stu_school');
if(selr)
window.open('editcustomer.php?id='+(selr), '_Self');
else alert("No selected row");
return false;
});
CUSTOM;
$grid->setJSCode($custom);
答案 8 :(得分:1)
在我的情况下,我的单元格的内容是HTML格式化程序的结果。我想要锚标记内的值。通过获取单元格内容然后通过jQuery从html中创建一个元素,我可以通过在我新创建的元素上调用.text()来访问原始值。
var cellContents = grid.getCell(rowid, 'ColNameHere');
console.log($(cellContents));
//in my case logs <h3><a href="#">The Value I'm After</a></h3>
var cellRawValue = $(cellContents).text();
console.log(cellRawValue); //outputs "The Value I'm After!"
我的答案基于@LLQ答案,但因为在我的情况下我的cellContents不是输入,我需要使用.text()
代替.val()
来访问原始值,所以我想我d发布此以防其他人正在寻找一种方法来访问格式化的jqGrid单元格的原始值。
答案 9 :(得分:1)
你可以通过以下方式获得它...... !!
var rowId =$("#list").jqGrid('getGridParam','selrow');
var rowData = jQuery("#list").getRowData(rowId);
var colData = rowData['UserId']; // perticuler Column name of jqgrid that you want to access
答案 10 :(得分:1)
你可以直接使用它....
onCellSelect: function(rowid,iCol,cellcontent,e) {
alert(cellcontent);
}
答案 11 :(得分:1)
我有一个解决方案: 1.使用this.value获取编辑行中的当前编辑值。 2.当单元格失去焦点时,将单元格值保存到隐藏字段。 3.在需要时阅读隐藏字段。
代码:
colModel="[
{ name: 'Net', index: 'Net', editable:true, editoptions: { dataEvents: [ { type: 'focusout', fn: function(e) {$('#HiddenNet').val(this.value);} }] }, editrules:{custom:true,}},
{ name: 'Tax', index: 'Tax', editable:true, editoptions: { dataEvents: [ { type: 'focus', fn: function(e) {this.value=$('#HiddenNet').val(); } }] }, editrules:{custom:true}}
]"
祝你好运
答案 12 :(得分:1)
这是我的解决方案:
function getDataLine(grida, rowid){ //vykradeno z inineeditu a vohackovano
if(grida.lastIndexOf("#", 0) === 0){
grida = $(grida);
}else{
grida = $("#"+grida);
}
var nm, tmp={}, tmp2={}, tmp3= {}, editable, fr, cv, ind;
ind = grida.jqGrid("getInd",rowid,true);
if(ind === false) {return success;}
editable = $(ind).attr("editable");
if (editable==="1") {
var cm;
var colModel = grida.jqGrid("getGridParam","colModel") ;
$("td",ind).each(function(i) {
// cm = $('#mygrid').p.colModel[i];
cm = colModel[i];
nm = cm.name;
if ( nm != 'cb' && nm != 'subgrid' && cm.editable===true && nm != 'rn' && !$(this).hasClass('not-editable-cell')) {
switch (cm.edittype) {
case "checkbox":
var cbv = ["Yes","No"];
if(cm.editoptions ) {
cbv = cm.editoptions.value.split(":");
}
tmp[nm]= $("input",this).is(":checked") ? cbv[0] : cbv[1];
break;
case 'text':
case 'password':
case 'textarea':
case "button" :
tmp[nm]=$("input, textarea",this).val();
break;
case 'select':
if(!cm.editoptions.multiple) {
tmp[nm] = $("select option:selected",this).val();
tmp2[nm] = $("select option:selected", this).text();
} else {
var sel = $("select",this), selectedText = [];
tmp[nm] = $(sel).val();
if(tmp[nm]) { tmp[nm]= tmp[nm].join(","); } else { tmp[nm] =""; }
$("select option:selected",this).each(
function(i,selected){
selectedText[i] = $(selected).text();
}
);
tmp2[nm] = selectedText.join(",");
}
if(cm.formatter && cm.formatter == 'select') { tmp2={}; }
break;
}
}
});
}
return tmp;
}
答案 13 :(得分:0)
我使用javascript获取编辑值:
的document.getElementById(&#39; idCell&#39)。值
我希望此信息对某人有用。
答案 14 :(得分:0)
我认为比使用getCell更好的解决方案,如你所知,在编辑模式下返回一些html是使用jquery直接访问字段。像你一样尝试解析的问题是它只适用于输入字段(不是像select这样的东西),如果你对输入字段做了一些自定义,它就不会起作用。以下内容将与输入和选择元素一起使用,并且只有一行代码。
ondblClickRow: function(rowid) {
var val = $('#' + rowid + '_MyCol').val();
}
答案 15 :(得分:0)
在我得到之前: 文本框的html标签就像
但是这是从特定列中获取值,工作和测试的解决方案
function getValue(rowId, cellId) {
var val = $("[rowId='"+rowId+"'][name='"+cellId+"']").val();
return val;
}
var values = getValue(rowId, 'cellid');
答案 16 :(得分:0)
我认为Aidan的回答是迄今为止最好的。
$('#yourgrid').jqGrid("editCell", 0, 0, false);
这会提交任何当前编辑,让您可以访问实际值。我更喜欢它,因为:
- 您不必对任何单元格引用进行硬编码。
- 它特别适合使用getRowData()获取整个网格,因为它不关心你刚刚编辑的是哪个单元格。
- 您不是要解析jqGrid生成的某些标记,这可能会在将来发生变化。
- 如果用户正在保存,则结束编辑会话可能是他们想要的行为。
答案 17 :(得分:0)
我的解决方法是将包含orignal值的对象附加到网格中的每个tr元素。我使用了afterAddRecord回调来获取jqGrid抛出它们之前的值,并使用jQuery的“数据”方法将它们存储在工作中。
示例:
afterInsertRow: function( rowid, rowdata, rowelem ) {
var tr = $("#"+rowid);
$(tr).data("jqgrid.record_data", rowelem);
},
“rowelem”是来自我们的JSON数据源或[jsonReader]的单元格值数组(http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#jsonreader_as_function)
然后在任何时候我都可以使用以下方法获取这些属性:
$(tr).data(“jqgrid.record_data”).
更多信息:http://wojciech.oxos.pl/post/9423083837/fetching-original-record-values-in-jqgrid
答案 18 :(得分:0)
我认为对此的扩展会得到它。 retrieving-original-row-data-from-jqgrid
答案 19 :(得分:0)
为了在线内编辑时获取单元格值,您需要捕获此事件(或其他类似事件,请检查documentation):
beforeSaveCell:function(rowid,celname,value,iRow,iCol){}
在value参数中,您具有当前编辑的单元格的“值”。
要获取行中的其余值,请使用getRowData()
我失去了很多时间,希望这会有所帮助。
答案 20 :(得分:0)
我有一种相当间接的方式。您的数据应具有唯一ID。
首先,设置格式化程序
$.extend(true, $.fn.fmatter, {
numdata: function(cellvalue, options, rowdata){
return '<span class="numData" data-num="'+rowdata.num+'">'+rowdata.num+'</span>';
}
});
在ColModel中使用此格式化程序。检索ID(例如选定的行)
var grid = $("#grid"),
rowId = grid.getGridPara('selrow'),
num = grid.find("#"+rowId+" span.numData").attr("data-num");
(或者你可以直接使用.data()获取最新的jquery 1.4.4)
答案 21 :(得分:-1)
尝试订阅afterEditCell事件,它将接收(rowid,cellname,value,iRow,iCol),其中value是您的单元格的新值
答案 22 :(得分:-2)
您可以使用getCol将列值作为数组获取,然后通过您感兴趣的行将其索引。
var col = $('#grid').jqGrid('getCol', 'Sales', false);
var val = col[row];