Ответ Олега, разъясняющий модель данных для автозаполнения пользовательского интерфейса jquery, позволил мне продвинуться вперед и понять, что автозаполнение не имеет ничего общего с созданием и отправкой массива postdata на сервер, форма редактирования jqgrid обрабатывает его.Обладая этими знаниями, я смог ответить на свой первоначальный вопрос и успешно интегрировать автозаполнение в jqgrid.Итак, в интересах обмена я хотел бы показать вам всю мою мотивацию и решение.
По умолчанию при выборе метки из списка автозаполнения в текст вводится значение выбранной пары метка / значение.коробка.Вся форма редактирования заботится о том, когда вы отправляете, что находится в полях редактирования.Поэтому, когда вы отправляете форму редактирования, значение элемента postdata ячейки снова будет содержать значение текстового поля автозаполнения.Но что, если, желая опубликовать значение пары метка / значение, вы хотите, чтобы метка пары метка / значение отображалась в текстовом поле?У тебя проблемы!Как вы получаете значение пары метка / значение, отправленное на сервер?
Что ж, потратив на это несколько дней, получается довольно просто.Хотя я уверен, что есть более одного решения, вот мое:
добавить скрытый столбец id в сетке
определитьвыберите: и фокус: события в функции автозаполнения
в функции выбора:;вставьте выбранную метку в текстовое поле (необязательно), отключите стандартное поведение автозаполнения, затем установите для ячейки скрытого столбца значение выбранной пары метка / значение
вфокус: функция;вставьте выбранную метку в текстовое поле (необязательно), отключите поведение автозаполнения по умолчанию
, добавьте событие "onclickSubmit:" в параметры редактирования navgrid с именем функции, например, "fixpostdata"
в функции «fixpostdata»;получите значение ячейки скрытого столбца и вставьте его в элемент postdata, связанный с ячейкой.
Ниже приведены сегменты сетки и код JavaScript, которые я использовал…
grid segments
{name:'wo_CUID', index:'wo_CUID', width: 70, hidden: true},
{name:'wo.CUID', index:'cu.LastName', width:120, sortable:true, editable:true, edittype:'text',
editoptions:{
dataInit:function(el){ // el contains the id of the edit form input text box.
$(el).autocomplete({
source: 'php/customer-ac-script.php',
minLength: 1,
select: function(event, ui){event.preventDefault();
$(el).val(ui.item.label);
var rowid = $('#tab3-grid').getGridParam('selrow');
// set the hidden wo_CUID cell with selected value of the selected label.
$('#tab3-grid').jqGrid('setCell', rowid,'wo_CUID',ui.item.value);},
focus: function(event, ui) {event.preventDefault();
$(el).val(ui.item.label);}
})
}
},
formoptions:{rowpos: 1, label:'Customer', elmprefix:'* '},
editrules:{required:true}
},
.
.
$('#tab3-grid').jqGrid('navGrid', '#tab3-pager',
{view:true, closeOnEscape:true, cloneToTop:true},
{jqModal:true, navkeys:[false,38,40], onclickSubmit: fixpostdata}, // edit options.
.
.
javascript function
// define handler function for 'onclickSubmit' event.
var fixpostdata = function(params, postdata){
var rowid = $('#tab3-grid').getGridParam('selrow');
var value = $('#tab3-grid').jqGrid('getCell', rowid,'wo_CUID');
postdata['wo.CUID'] = value;
return;
}
Функция fixpostdata срабатывает, когда вы отправляете форму редактирования, но перед отправкой на сервер массива постданных.На этом этапе вы заменяете значение элемента postdata ячейки тем, что хотите.В этом случае значение пары метка / значение сохраняется в ячейке скрытого столбца.Когда функция возвращается, измененный массив постданных отправляется на сервер.
Готово!