Cómo obtener un valor de celda jqGrid al editar

Cómo obtener un valor de celda jqGrid al editar en línea (getcell y getRowData devuelven el contenido de la celda y no el valor actual del elemento de entrada).

Función general para obtener el valor de la celda con la identificación de la fila dada y la identificación de la celda

Crea en tu función de código js:

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

Ejemplo de uso:

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

Malvado, pero funciona.

Aquí hay un ejemplo de solución básica con una función de usuario.

  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; } 

Después de muchas horas de dolor, encontré que esta era la solución más simple. Llamar esto antes de ir a buscar los datos de la fila:

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

Guardará cualquier edición actual y no lanzará si no hay filas en la grilla.

Como dijiste, de acuerdo con la documentación de jqGrid para getCell y getRowData:

No use este método cuando edite la fila o la celda. Esto devolverá el contenido de la celda y no el valor real del elemento de entrada

Dado que ninguno de estos métodos devolverá sus datos directamente, tendrá que usarlos para devolver el contenido de la celda y luego analizarlo, quizás usando jQuery. Sería bueno si una versión futura de jqGrid pudiera proporcionar un medio para hacer parte de este análisis sintáctico, y / o proporcionar una API para hacerlo más sencillo. Pero, por otro lado, ¿este es realmente un caso de uso que aparece con tanta frecuencia?

Alternativamente, si puede explicar su problema original con más detalle, puede haber otras opciones.

Prueba esto, te dará un valor de columna en particular

 onSelectRow: function(id) { var rowData = jQuery(this).getRowData(id); var temp= rowData['name'];//replace name with you column alert(temp); } 

Básicamente, debe guardar la fila antes de acceder al contenido de la celda.

Si lo hace, obtendrá el valor de la celda en lugar del marcado que aparece cuando la celda está en modo de edición.

 jQuery.each(selectedRows, function(index, foodId) { // save the row on the grid in 'client array', IE 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'] + ','; }); 

Hola, conocí este problema también. Finalmente resolví este problema con jQuery. Pero la respuesta está relacionada con la cuadrícula en sí, no es común. Espero eso ayude.

Mi solución como esta:

 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'); 

puedes usar esto directamente …

 onCellSelect: function(rowid,iCol,cellcontent,e) { alert(cellcontent); } 

Esta es mi solución:

  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; } 

Tengo una solución: 1. Usar this.value para obtener el valor de edición actual en la fila de edición. 2. Guarde el valor de celda en un campo oculto cuando la celda pierde su foco. 3. Lea el campo oculto cuando lo necesite.

El código:

  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}} ]" 

Buena suerte

¡Puedes obtenerlo de la siguiente manera …!

 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 

En mi caso, el contenido de mi celda es HTML como resultado de un formateador. Quiero el valor dentro de la etiqueta de anclaje Al buscar el contenido de la celda y luego crear un elemento a partir del html a través de jQuery, puedo acceder al valor en bruto llamando a .text () en mi elemento recién creado.

 var cellContents = grid.getCell(rowid, 'ColNameHere'); console.log($(cellContents)); //in my case logs 

The Value I'm After

var cellRawValue = $(cellContents).text(); console.log(cellRawValue); //outputs "The Value I'm After!"

mi respuesta se basa en la respuesta @LLQ, pero como en mi caso mi cellContents no es una entrada, necesitaba usar .text() lugar de .val() para acceder al valor bruto, así que pensé en publicarlo en el estuche cualquier otra persona está buscando una forma de acceder al valor bruto de una celda jqGrid formateada.

su código de escritura muy simple en you grid.php y pasa el valor a otro page.php
de esta manera puedes obtener otro vaue de celda de columna

pero cualquiera puede hacer una ventana como window.open (ruta para pasar el valor …) en una caja elegante o en una caja de cloro.

 $custom = <<setJSCode($custom); 

Creo que una extensión de esto lo conseguiría para ti. retrieving-original-row-data-from-jqgrid

Creo que es una mejor solución que utilizar getCell que, como saben, devuelve algo de HTML cuando en el modo de edición se usa jquery para acceder directamente a los campos. El problema al intentar analizar como lo está haciendo es que solo funcionará para campos de entrada (no para elementos como seleccionar), y no funcionará si ha realizado algunas personalizaciones en los campos de entrada. Lo siguiente funcionará con entradas y elementos seleccionados y es solo una línea de código.

 ondblClickRow: function(rowid) { var val = $('#' + rowid + '_MyCol').val(); } 

Tengo una forma bastante indirecta. Sus datos deben tener una identificación única.

Primero, configurar un formateador

 $.extend(true, $.fn.fmatter, { numdata: function(cellvalue, options, rowdata){ return ''+rowdata.num+''; } }); 

Use este formateador en ColModel. Para recuperar ID (por ejemplo, la fila seleccionada)

 var grid = $("#grid"), rowId = grid.getGridPara('selrow'), num = grid.find("#"+rowId+" span.numData").attr("data-num"); 

(o puede usar directamente .data () para el último jquery 1.4.4)

Para obtener el valor de la celda cuando se realiza la edición en línea, debe capturar este evento (u otro evento similar, consultar la documentación ):

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

En el parámetro de valor tiene el ‘valor’ de la celda que se editó actualmente.

Para obtener el rest de los valores en la fila use getRowData ()

Perdí mucho tiempo con esto, espero que esto ayude.

Mi solución es adjuntar un objeto que contiene valores de señal a cada elemento tr en la grilla. Utilicé la función callback afterAddRecord para tener acceso a los valores antes de que jqGrid los descarte y el método de “datos” de jQuery para almacenarlos en el trabajo.

Ejemplo:

 afterInsertRow: function( rowid, rowdata, rowelem ) { var tr = $("#"+rowid); $(tr).data("jqgrid.record_data", rowelem); }, 

“Rowelem” es la matriz de valores de celda de nuestro feed de datos JSON o [jsonReader] (http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#jsonreader_as_function)

Luego, en cualquier punto, puedo obtener esos atributos usando:

 $(tr).data(“jqgrid.record_data”). 

Más en: http://wojciech.oxos.pl/post/9423083837/fetching-original-record-values-in-jqgrid

Creo que la respuesta de Aidan es la mejor.

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

Esto confirma las ediciones actuales, lo que le da acceso al valor real. Lo prefiero porque:

  • No tiene que codificar ninguna referencia de celda en.
    • Está especialmente indicado para usar getRowData () para obtener toda la grilla, ya que no le importa qué celda acaba de editar.
    • No está tratando de analizar un marcado generado por jqGrid que puede cambiar en el futuro.
    • Si el usuario está guardando, entonces terminar la sesión de edición es probablemente el comportamiento que querrían de todos modos.

Antes estaba recibiendo: etiqueta html del cuadro de texto algo así como

pero esta es la solución para obtener el valor de esa columna en particular, trabajando y probando

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

Obtengo valor de edición usando javascript:

document.getElementById (‘idCell’). value

Espero que esta información sea útil para alguien.

intente suscribirse al evento afterEditCell que recibirá (rowid, cellname, value, iRow, iCol) donde value es su nuevo valor de su celda

Puede usar getCol para obtener los valores de la columna como una matriz y luego indexarla en la fila que le interesa.

 var col = $('#grid').jqGrid('getCol', 'Sales', false); var val = col[row]; 
    Intereting Posts