Как получить значение ячейки jqGrid при поточном редактировании (getcell и getRowData возвращает содержимое ячейки, а не значение активации для элемента ввода).
Как получить значение ячейки jqGrid при редактировании
Ответ 1
Общая функция для получения значения ячейки с заданным идентификатором строки и идентификатором ячейки
Создайте функцию js-кода:
function getCellValue(rowId, cellId) {
var cell = jQuery('#' + rowId + '_' + cellId);
var val = cell.val();
return val;
}
Пример использования:
var clientId = getCellValue(15, 'clientId');
Изворотливый, но работает.
Ответ 2
Вот пример базового решения с пользовательской функцией.
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;
}
Ответ 3
После многих часов печали я нашел это самым простым решением. Вызовите это перед извлечением данных строки:
$('#yourgrid').jqGrid("editCell", 0, 0, false);
Он сохранит любое текущее редактирование и не будет выбрасываться, если в сетке нет строк.
Ответ 4
Попробуйте это, это даст вам конкретное значение столбца
onSelectRow: function(id) {
var rowData = jQuery(this).getRowData(id);
var temp= rowData['name'];//replace name with you column
alert(temp);
}
Ответ 5
Как вы сказали, в соответствии с документацией jqGrid для getCell и getRowData:
Не используйте этот метод при редактировании строки или ячейки. Это вернет содержимое ячейки, а не фактическое значение входного элемента
Поскольку ни один из этих методов не будет возвращать ваши данные напрямую, вам придется использовать их, чтобы вернуть содержимое ячейки, а затем проанализировать ее, возможно, используя jQuery. Было бы неплохо, если бы будущая версия jqGrid могла предоставить средство для выполнения самого этого синтаксического анализа и/или предоставить API, чтобы сделать его более простым. Но, с другой стороны, это действительно популярный случай, который часто возникает?
В качестве альтернативы, если вы можете более подробно объяснить свою оригинальную проблему, могут быть другие варианты.
Ответ 6
В принципе, вы должны сохранить строку до того, как получите доступ к содержимому ячейки.
Если вы это сделаете, то вы получите значение для ячейки вместо разметки, которая появляется, когда ячейка находится в режиме редактирования.
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'] + ',';
});
Ответ 7
Привет, я тоже встретил эту проблему. Наконец, я решил эту проблему 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');
Ответ 8
вы можете использовать это прямо....
onCellSelect: function(rowid,iCol,cellcontent,e) {
alert(cellcontent);
}
Ответ 9
Это мое решение:
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;
}
Ответ 10
У меня есть решение: 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}}
]"
Удача
Ответ 11
Вы можете получить его со следующего пути...!!
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
Ответ 12
В моем случае содержимое моей ячейки является HTML как результат форматирования. Я хочу значение внутри тега привязки. Извлекая содержимое ячейки, а затем создавая элемент из html через jQuery, я могу затем получить доступ к необработанному значению, вызвав .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.
Ответ 13
его очень простой код записи в вашем grid.php и передать значение другой странице .php
таким образом, вы можете получить другую ячейку ячейки vaue
но любой может сделать как window.open(путь для передачи значения....) в поле fancy box или clor?
$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);
Ответ 14
Я думаю, что расширение этого получило бы это для вас. retrieving-original-row-data-from-jqgrid
Ответ 15
Я думаю, что лучшее решение, чем использование getCell, которое, как вам известно, возвращает некоторый html, когда в режиме редактирования используется jquery для прямого доступа к полям. Проблема с попыткой выполнить синтаксический анализ, подобный тому, что вы делаете, заключается в том, что он будет работать только для полей ввода (не таких, как select), и это не сработает, если вы внесли некоторые настройки в поля ввода. Следующее будет работать со входами и элементами выбора и является только одной строкой кода.
ondblClickRow: function(rowid) {
var val = $('#' + rowid + '_MyCol').val();
}
Ответ 16
У меня довольно косвенный путь. Ваши данные должны иметь уникальный идентификатор.
Сначала установите форматтер
$.extend(true, $.fn.fmatter, {
numdata: function(cellvalue, options, rowdata){
return '<span class="numData" data-num="'+rowdata.num+'">'+rowdata.num+'</span>';
}
});
Используйте этот форматтер в ColModel. Чтобы получить идентификатор (например, выбранную строку)
var grid = $("#grid"),
rowId = grid.getGridPara('selrow'),
num = grid.find("#"+rowId+" span.numData").attr("data-num");
(или вы можете напрямую использовать .data() для последнего jquery 1.4.4)
Ответ 17
Чтобы получить значение ячейки при онлайн-редактировании, вам необходимо зафиксировать это событие (или другое подобное событие, отметьте документацию):
beforeSaveCell: function (rowid, celname, value, iRow, iCol) {}
В параметре значения у вас есть "значение" ячейки, которая была в данный момент отредактирована.
Чтобы получить остальные значения в строке, используйте getRowData()
Я потерял много времени с этим, надеюсь, что это поможет.
Ответ 18
Мое обходное решение - присоединить объект, содержащий значения 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
Ответ 19
Я думаю, что ответ Айдана, безусловно, лучший.
$('#yourgrid').jqGrid("editCell", 0, 0, false);
Выполняет любые текущие изменения, предоставляя вам доступ к реальному значению. Я предпочитаю это, потому что:
- Вам не нужно жестко закодировать ссылки на ячейки.
- Это особенно хорошо подходит для использования getRowData(), чтобы получить всю сетку, так как не волнует, какую ячейку вы только что редактировали.
- Вы не пытаетесь разобрать некоторую разметку, сгенерированную jqGrid, которая может измениться в будущем.
- Если пользователь сохраняет, то завершение сеанса редактирования, скорее всего, будет по-прежнему желательным.
Ответ 20
До того, как я получил: html-тег текстового поля что-то вроде
но вот решение получить значение из этого конкретного столбца, работая и протестировав
function getValue(rowId, cellId) {
var val = $("[rowId='"+rowId+"'][name='"+cellId+"']").val();
return val;
}
var values = getValue(rowId, 'cellid');
Ответ 21
Я получаю значение редактирования с помощью javascript:
document.getElementById( 'idCell'). Значение
Я надеюсь, что эта информация будет полезной для кого-то.
Ответ 22
попробуйте подписаться на событие afterEditCell, которое он получит (rowid, cellname, value, iRow, iCol), где value - ваше новое значение вашей ячейки
Ответ 23
Вы можете использовать getCol, чтобы получить значения столбцов в виде массива, а затем проиндексировать его по интересующей вас строке.
var col = $('#grid').jqGrid('getCol', 'Sales', false);
var val = col[row];