Подтвердить что ты не робот

Как получить значение ячейки jqGrid при редактировании

Как получить значение ячейки jqGrid при поточном редактировании (getcell и getRowData возвращает содержимое ячейки, а не значение активации для элемента ввода).

4b9b3361

Ответ 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); 

Ответ 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];