jqGrid с функцией выбора даты не может безопасно хранить данные

#jquery-ui #jqgrid

#jquery-пользовательский интерфейс #jqgrid

Вопрос:

Я использую jqGrid с редактированием ячеек и функцией выбора даты. Все работает хорошо, за исключением того, что из-за какой-то странной обработки событий существует риск потери пользовательских данных. Когда ячейка выбрана и в ней установлена дата, текст помещается обратно в редактируемую ячейку, но он не передается обратно на сервер, если не выполняется какая-либо навигация или не нажата клавиша enter с установленной датой. Это означает, что если пользователь просто вводит данные и не выполняет никаких дополнительных действий (о которых нет отзывов), отредактированное значение хранится в подвешенном состоянии.

Очевидным решением является использование OnClose для средства выбора даты. Это вызывается, но, похоже, нет способа записать данные на сервер. Я пытался использовать saveCell, но это оставляет текстовый редактор ячеек открытым после записи данных, так что, если данные не записываются должным образом, создается впечатление, что все в порядке. Я также пробовал editCell, но, похоже, это повторяется бесконечно или создает какой-то цикл. Я также пытался подделать нажатие клавиши следующим образом:

 colModel :[ 
  ...  
  {name:'date', index:'date', width:100, editable: true,
   editoptions: {
   size: 10, maxlength: 10,
   dataInit: function(elem){ 
               setTimeout(function(){ 
                 $(elem).datepicker({ 
                   onClose: function(dateText, inst) { 
                     var e = jQuery.Event("keydown");        
                     e.which = 13;
                     $(elem).trigger(e);
                   }
                 ...
  

Я все еще осваиваюсь с jquery и jqgrid, поэтому любые советы будут очень кстати.

Ответ №1:

Вероятно, вам следует установить фокус перед запуском клавиши «Enter»? Нравится

 setTimeout(function(){
    $(elem).focus().trigger({ type: 'keypress', charCode: 13 });
},100);
  

Не могли бы вы это протестировать?

Комментарии:

1. Протестировал его и несколько вариантов (например, используя нажатие клавиши, а не keypress). Это действительно казалось очень правдоподобным, но, увы, никакой радости.

2. @morungos: Не могли бы вы более точно описать, что не так? У меня нет текущих демонстрационных версий с удаленным сохранением данных и редактированием ячеек, поэтому я не могу воспроизвести вашу проблему. Я лично использую только встроенное редактирование или / и формы для сохранения данных на сервере.

3. Проблема заключается в следующем: как принудительно сбросить данные на сервер, когда функция выбора даты ячейки закрывается. На данном этапе у нас есть действительная дата, и она завершена, так что это имеет смысл.

4. @morungos: Да, и вы пытаетесь имитировать нажатие клавиши «Enter». Не могли бы вы попробовать начать $(elem).focus().trigger в другом потоке: смотрите Обновленный ответ.

5. Очень близко и функционально правильно. Никогда не думал использовать thread hack, чтобы избежать рекурсии, но это работает хорошо. Две проблемы: во-первых, я в конечном итоге использовал