34

在线编辑时如何获取 jqGrid 单元格值(getcell 和 getRowData 返回单元格内容,而不是输入元素的实际值)。

4

23 回答 23

17

获取具有给定行 ID 和单元格 ID 的单元格值的通用函数

在您的 js 代码函数中创建:

function getCellValue(rowId, cellId) {
    var cell = jQuery('#' + rowId + '_' + cellId);        
    var val = cell.val();
    return val;
}

使用示例:

var clientId = getCellValue(15, 'clientId');

狡猾,但有效。

于 2011-04-07T09:54:51.307 回答
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;
}
于 2009-11-23T15:01:41.833 回答
7

经过几个小时的悲伤,我发现这是最简单的解决方案。在获取行数据之前调用它:

$('#yourgrid').jqGrid("editCell", 0, 0, false);

如果网格中没有行,它将保存任何当前编辑并且不会抛出。

于 2011-03-24T22:26:09.387 回答
4

正如您所说,根据getCell 和 getRowData 的 jqGrid 文档:

编辑行或单元格时不要使用此方法。这将返回单元格内容而不是输入元素的实际值

由于这些方法都不会直接返回您的数据,因此您必须使用它们来返回单元格内容本身,然后解析它,也许使用 jQuery。如果 jqGrid 的未来版本可以提供一种方法来自己进行某些解析,和/或提供一个 API 使其更简单,那就太好了。但另一方面,这真的是一个经常出现的用例吗?

或者,如果您可以更详细地解释您的原始问题,则可能还有其他选择。

于 2009-11-21T18:46:31.840 回答
3

试试这个,它会给你特定列的值

onSelectRow: function(id) {
    var rowData = jQuery(this).getRowData(id); 
    var temp= rowData['name'];//replace name with you column
    alert(temp);
}
于 2011-06-22T10:34:24.077 回答
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');
于 2012-05-14T07:18:30.270 回答
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'] + ',';
        });
于 2010-09-30T14:51:06.870 回答
1

This is my solution:

                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;
                }
于 2012-04-10T20:13:45.420 回答
1

它非常简单地在你 grid.php 中编写代码并将值传递给另一个 page.php
以这种方式你可以获得其他列单元格值

但是任何人都可以在花哨的盒子或颜色盒子中制作类似的 window.open(path to pass value....) 吗?

$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); 
于 2014-07-08T02:47:49.470 回答
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
于 2014-02-18T12:15:05.377 回答
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()访问原始值的输入,所以我想我会发布这个以防其他人正在寻找一种方法访问格式化的 jqGrid 单元格的原始值。

于 2014-04-18T21:19:55.350 回答
1

你可以直接使用这个......

onCellSelect: function(rowid,iCol,cellcontent,e) {
            alert(cellcontent);
        }
于 2011-07-02T08:01:32.517 回答
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}}
    ]" 

祝你好运

于 2013-02-12T23:11:29.270 回答
0

我的解决方法是将包含原始值的对象附加到网格中的每个 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

于 2011-08-26T19:34:16.707 回答
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)

于 2010-12-01T08:24:24.950 回答
0

我认为对此的扩展会为您提供。 从 jqgrid 检索原始行数据

于 2010-05-28T16:07:09.603 回答
0

我认为比使用 getCell 更好的解决方案,如您所知,在编辑模式下返回一些 html 是使用 jquery 直接访问字段。尝试像您正在做的那样进行解析的问题在于,它仅适用于输入字段(而不是 select 之类的东西),如果您对输入字段进行了一些自定义,它将不起作用。以下将使用输入和选择元素,并且只有一行代码。

ondblClickRow: function(rowid) {
    var val = $('#' + rowid + '_MyCol').val();
}
于 2010-05-28T21:01:02.470 回答
0

为了在在线编辑时获取单元格值,您需要捕获此事件(或其他类似事件,请查看文档):

beforeSaveCell: 函数 (rowid, celname, value, iRow, iCol) { }

在 value 参数中,您拥有当前编辑的单元格的“值”。

要获取行中的其余值,请使用 getRowData()

我为此浪费了很多时间,希望这会有所帮助。

于 2011-03-10T19:12:32.387 回答
0

我认为艾丹的回答是迄今为止最好的。

$('#yourgrid').jqGrid("editCell", 0, 0, false);

这会提交任何当前的编辑,让您访问真正的价值。我更喜欢它,因为:

  • 您不必在其中硬编码任何单元格引用。
    • 它特别适合使用 getRowData() 来获取整个网格,因为它不关心您刚刚编辑的是哪个单元格。
    • 您不是在尝试解析 jqGrid 生成的某些标记,这些标记将来可能会发生变化。
    • 如果用户正在保存,那么结束编辑会话很可能是他们想要的行为。
于 2012-03-13T17:35:37.697 回答
0

我使用 javascript 获得编辑值:

document.getElementById('idCell').value

我希望这些信息对某人有用。

于 2017-05-30T23:21:04.317 回答
0

在我得到之前:文本框的html标签类似于

但这是从该特定列中获取价值的解决方案,工作和测试

function getValue(rowId, cellId) {
        var val = $("[rowId='"+rowId+"'][name='"+cellId+"']").val();
        return val;
       }

var values = getValue(rowId, 'cellid');
于 2016-04-29T03:26:43.140 回答
-1

尝试订阅 afterEditCell 事件,它将收到 (rowid, cellname, value, iRow, iCol) 其中 value 是您的单元格的新值

于 2009-12-18T02:32:17.520 回答
-2

您可以使用 getCol 将列值作为数组获取,然后按您感兴趣的行对其进行索引。

var col = $('#grid').jqGrid('getCol', 'Sales', false);

var val = col[row];
于 2009-11-21T14:10:06.487 回答