Comment obtenir une valeur de cellule jqGrid lors de l'édition
Comment obtenir une valeur de cellule jqGrid lors de l'édition en ligne (getcell et getRowData renvoie le contenu de la cellule et non la valeur actuelle de l'élément d'entrée).
23 réponses
fonction générale pour obtenir la valeur de la cellule avec la ligne donnée id et la cellule id
créer dans votre fonction de code js:
function getCellValue(rowId, cellId) {
var cell = jQuery('#' + rowId + '_' + cellId);
var val = cell.val();
return val;
}
exemple d'utilisation:
var clientId = getCellValue(15, 'clientId');
Douteux, mais qui fonctionne.
Voici un exemple de solution de base avec une fonction utilisateur.
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;
}
après de nombreuses heures de chagrin, j'ai trouvé que c'était la solution la plus simple. Appelez ceci avant de récupérer les données de la ligne:
$('#yourgrid').jqGrid("editCell", 0, 0, false);
il sauvera n'importe quelle édition courante et ne lancera pas s'il n'y a pas de lignes dans la grille.
Comme vous l'avez dit, , selon le jqGrid documentation pour getCell et getRowData:
Ne pas utiliser cette méthode lorsque vous éditez la ligne ou la cellule. Cela retournera le contenu de la cellule et non la valeur réelle de l'élément d'entrée
Puisqu'aucune de ces méthodes ne retournera vos données directement, vous devrez les utiliser pour retourner le contenu de la cellule elle - même et puis le Parser, peut-être en utilisant jQuery. Ce serait bien si une future version de jqGrid pouvait fournir un moyen de procéder elle-même à cette analyse et/ou fournir une API pour la rendre plus simple. Mais d'un autre côté est-ce vraiment un cas d'utilisation qui revient souvent?
Sinon, si vous pouvez expliquer votre problème plus en détail, il peut y avoir d'autres options.
essayez ceci, il vous donnera la valeur particulière de la colonne
onSelectRow: function(id) {
var rowData = jQuery(this).getRowData(id);
var temp= rowData['name'];//replace name with you column
alert(temp);
}
en gros, vous devez sauvegarder la rangée avant d'accéder au contenu de la cellule.
si vous le faites, alors vous obtenez la valeur pour la cellule au lieu du markup qui vient quand la cellule est en mode édition.
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'] + ',';
});
Salut. j'ai rencontré ce problème aussi. Finalement j'ai résolu ce problème par jQuery. Mais la réponse est liée à la grille elle-même, pas une commune. Espérons que cela aide.
ma solution comme ceci:
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');
vous pouvez l'utiliser directement....
onCellSelect: function(rowid,iCol,cellcontent,e) {
alert(cellcontent);
}
C'est ma 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;
}
j'ai une solution: 1. L'utilisation de ce.valeur pour obtenir la valeur d'édition courante dans la ligne d'édition. 2. Sauvegardez la valeur de la cellule dans un champ caché lorsque la cellule a perdu sa focalisation. 3. Lire le champ caché quand vous en avez besoin.
le code:
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}}
]"
Bonne Chance
vous pouvez l'obtenir de la manière suivante...!!
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
dans mon cas, le contenu de ma cellule est HTML à la suite d'un formatteur. Je veux la valeur à l'intérieur de l'étiquette d'ancrage. En récupérant le contenu de la cellule et en créant ensuite un élément à partir du html via jQuery, je suis capable d'accéder ensuite à la valeur brute en appelant .texte() sur mon nouvellement créé élément.
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!"
ma réponse est basée sur la réponse de @LLQ, mais puisque dans mon cas mes contenus cellulaires ne sont pas une entrée, j'ai dû utiliser .text()
au lieu de .val()
pour accéder à la valeur donc j'ai pensé que je voudrais poster ceci au cas où quelqu'un d'autre est à la recherche d'un moyen d'accéder à la valeur brute d'une cellule jqGrid formatée.
son code d'écriture très simple dans votre grille.php et passer la valeur à une autre page.php
de cette façon, vous pouvez obtenir d'autres valeurs de cellules de colonne
mais n'importe qui peut faire une fenêtre semblable.open(chemin pour passer de la valeur....) dans la fantaisie ou de la boîte de clor boîte?
$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);
je pense qu'une extension de l'obtenir pour vous. "151910920 de" récupération-original-ligne-données-de-jqgrid
je pense qu'une meilleure solution que d'utiliser getCell qui, comme vous le savez, renvoie du html en mode édition est d'utiliser jquery pour accéder directement aux champs. Le problème avec essayer d'analyser comme vous le faites est qu'il ne fonctionnera que pour les champs d'Entrée (pas les choses comme select), et il ne fonctionnera pas si vous avez fait quelques personnalisations aux champs d'entrée. Ce qui suit fonctionnera avec les entrées et sélectionnera les éléments et n'est qu'une ligne de code.
ondblClickRow: function(rowid) {
var val = $('#' + rowid + '_MyCol').val();
}
j'ai un chemin plutôt indirect. Vos données doivent avoir un identifiant unique.
tout d'abord, définir un formatteur
$.extend(true, $.fn.fmatter, {
numdata: function(cellvalue, options, rowdata){
return '<span class="numData" data-num="'+rowdata.num+'">'+rowdata.num+'</span>';
}
});
utilisez ce formatteur dans ColModel. Pour récupérer L'ID (par exemple une ligne sélectionnée)
var grid = $("#grid"),
rowId = grid.getGridPara('selrow'),
num = grid.find("#"+rowId+" span.numData").attr("data-num");
(ou vous pouvez utiliser directement .data() pour la dernière version de jquery 1.4.4)
pour obtenir la valeur de la cellule lors de l'édition en ligne, vous devez capturer cet événement(ou un autre événement similaire, cochez documentation ):
beforeSaveCell: function (rowid, celname, value, iRow, iCol) { }
dans le paramètre value vous avez la valeur de la cellule qui a été éditée.
pour obtenir le reste des valeurs dans la rangée utilisez getRowData ()
j'ai perdu un beaucoup de temps avec cela, espérons que cette aide.
ma solution consiste à attacher un objet contenant des valeurs initiales à chaque élément tr de la grille. J'ai utilisé afterAddRecord callback pour mettre la main sur les valeurs avant que jqGrid ne les jette et la méthode "data" de jQuery pour les stocker dans le travail.
exemple:
afterInsertRow: function( rowid, rowdata, rowelem ) {
var tr = $("#"+rowid);
$(tr).data("jqgrid.record_data", rowelem);
},
"rowelem" est le tableau de valeurs de cellule de notre JSON flux de données ou [jsonReader] (http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#jsonreader_as_function)
alors à tout moment je peux récupérer ces attributs en utilisant:
$(tr).data(“jqgrid.record_data”).
plus à: http://wojciech.oxos.pl/post/9423083837/fetching-original-record-values-in-jqgrid
je pense que la réponse D'Aidan est de loin la meilleure.
$('#yourgrid').jqGrid("editCell", 0, 0, false);
cette option vous permet d'accéder à la valeur réelle. Je le préfère parce que:
- vous n'avez pas à coder toutes les références de cellules.
- Il est particulièrement bien adapté à l'utilisation de getRowData() pour obtenir l'intégralité de la grille, comme il ne se soucie pas de qui de cellules que vous venez d'éditer.
- Vous n'êtes pas en train d'essayer d'analyser un certain markup généré par jqGrid qui pourrait changer dans le futur.
- si l'utilisateur sauvegarde, alors la fin de la session d'édition est probablement le comportement qu'il voudrait de toute façon.
avant que je n'obtienne : étiquette html de la boîte de texte quelque chose comme
Mais voici la solution pour obtenir la valeur de cette colonne particulière, de travail et testé
function getValue(rowId, cellId) {
var val = $("[rowId='"+rowId+"'][name='"+cellId+"']").val();
return val;
}
var values = getValue(rowId, 'cellid');
j'obtiens la valeur d'édition en utilisant javascript:
document.getElementById ("idCell").valeur
j'espère que cette information utile pour quelqu'un.
essayez de vous abonner à l'événement afterEditCell qu'il recevra (rowid, cellname, value, iRow, iCol) où la valeur est votre nouvelle valeur de votre cellule
Vous pouvez utiliser getCol pour obtenir les valeurs de colonne dans un tableau l'indice, puis par la ligne qui vous intéresse.
var col = $('#grid').jqGrid('getCol', 'Sales', false);
var val = col[row];