#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, чтобы избежать рекурсии, но это работает хорошо. Две проблемы: во-первых, я в конечном итоге использовал