jqGrid: действительно ли возможно фиксировать изменение ячеек при переключении вкладок прочь вместо того, чтобы нажать Enter?

В то время как SQL Располагает метод, действительно закрывает соединение (в конечном счете согласно смелости), необходимо оставить вызов для Закрытия там. Причина состоит в том, что Вы полагались бы на конкретную реализацию, Располагают для вызова близко. Также наблюдение Открытого без Завершения похоже на наблюдение Нового без Удаления для тех из нас, которые запрограммировали на неуправляемых языках. Это - запах кода для меня.

7
задан Glorfindel 20 July 2019 в 15:52
поделиться

2 ответа

Мое решение заключалось в использовании базовых селекторов и событий jQuery независимо от сетки для обнаружения этого события. Я использую события live и blur в текстовых полях в сетке, чтобы запечатлеть событие. Эти два события не поддерживаются в сочетании друг с другом, поэтому этот хак оказался решением:

Моделирование «фокуса» и «размытия» в методе jQuery .live ()

2
ответ дан 6 December 2019 в 10:52
поделиться

Для редактирования в строке вы можете сделать это несколькими способами. Чтобы привязать событие onblur к полю ввода с помощью триггера onSelectRow, устранив необходимость в кнопках редактирования и сохранения, сделайте примерно следующее:

  $('#gridId').setGridParam({onSelectRow: function(id){
    //Edit row on select
    $('#gridid').editRow(id, true); 

    //Modify event handler to save on blur.
    var fieldName = "Name of the field which will trigger save on blur.";
    //Note, this solution only makes sense when applied to the last field in a row.
    $("input[id^='"+id+"_"+fieldName+"']","#gridId").bind('blur',function(){
      $('#gridId').saveRow(id);
    });
  }});

Чтобы применить обработчик события jQuery live ко всем вводам, которые могут появиться в строке (jqGrid помечает все вводы как rowId_fieldName), в цикле переберите количество строк в вашей сетке и сделайте примерно следующее:

var ids = $("#gridId").jqGrid('getDataIDs');
for(var i=0; i < ids.length; i++){ 
  fieldName = "field_which_will_trigger_on_blur";
  $("input[id^='"+ids[i]+"_"+fieldName+"']","#gridId").live('blur',function(){
    $('#gridId').jqGrid('saveRow',ids[i]);
  });
}

Примечание: Чтобы использовать размытие с .live(), как описано выше, вам понадобится jQuery 1.4 или патч, расположенный по адресу: Имитация "фокуса" и "размытия" в методе jQuery .live()

Будьте осторожны с rowIds. Когда вы перейдете к сортировке, добавлению и удалению строк, вы можете столкнуться с тем, что придется написать несколько хитрых jQuery для преобразования идентификаторов строк в iRows или номера строк.

Если вы, как и я, перешли к редактированию отдельных ячеек, вам нужно изменить триггер afterEditCell следующим образом:

  $('#gridId').setGridParam({afterEditCell: function(id,name,val,iRow,iCol){
    //Modify event handler to save on blur.
    $("#"+iRow+"_"+name,"#gridId").bind('blur',function(){
      $('#gridId').saveCell(iRow,iCol);
    });
  }});

Надеюсь, это поможет...

10
ответ дан 6 December 2019 в 10:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: