Intereting Posts
CodeIgniter большая партия вставки oci_connect () работает только из командной строки получение полного URL-адреса, включая строку запроса после хэша привязка регулярного выражения к параметру PDO в инструкции PDO Форма HTML просто не отправит некоторые POST-переменные в скрипт PHP Форматирование числа сгруппированными тысячами Расширение CI_Controller Как я могу получить access_token из официального php-клиента tumblr? Зачем нам нужно кодировать изображения base64 перед передачей? Действие триггера, когда загрузка файла фактически завершается PHP-эквивалентное шифрование / дешифрование для Java tripleDES. Я не получаю такое же шифрование / дешифрование php с базой данных postgresql Math / Algorithm / JS: Как определить, пересекаются ли прямоугольники 2+, учитывая TopLeft (x0, y0) и Bottom-Right (x1, y1) каждого прямоугольника Могу ли я сделать более одного запроса на связку? что такое имя переменной, которое хранит POST, когда выполняется через jquery .ajax?

Диалог пользовательского редактирования jqGrid

Я работаю над приложением, использующим jqGrid. Проблема в том, что диалог редактирования, который должен появиться при редактировании строки, должен иметь определенный макет. Поэтому я бы предпочел загрузить его через ajax, а затем отправить данные обратно в jqGrid вручную. Я много искал на форумах, но я не мог найти пример того, как это сделать.

Итак, мне просто нужно, чтобы jqGrid заполнил диалоговое окно редактирования с помощью настраиваемого контента из PHP-скрипта.

ОБНОВЛЕНИЕ: Идея состоит в том, что у меня есть генератор формы, где пользователь устанавливает положение / ширину / высоту / видимость полей редактирования … и это необходимо использовать в диалоговом окне редактирования.

Вы можете использовать editfunc или addfunc опцию navGrid . Если, например, editfunc определены, то вместо editGridRow jqGrid будет вызываться editfunc с идентификатором выбранной строки в качестве параметра.

Альтернативу вы можете использовать пользовательскую кнопку (см. Этот ответ в качестве примера).

Чтобы изменить данные в таблице после диалогового окна редактирования, вы можете использовать функцию setRowData .

ОБНОВЛЕНО : Если вам нужно просто внести некоторые изменения в макет диалогового окна редактирования, вы можете использовать beforeShowForm для модификаций.

Вы можете проверить это учебное пособие , которое является официальным демо-сайтом плагина jqGrid. Я уверен, что есть примеры некоторых «Редактирование строк» ​​в этой категории. Вы также можете просмотреть множество других примеров jqGrid на этом демо-сайте.
Вы также можете проверить домашнюю страницу .

Если у вас есть еще какие-то проблемы, вы можете попросить его здесь. Я использовал некоторые из этих примеров на одном из моих (конфиденциальных) веб-сайтов моего клиента, поэтому с ними можно будет легко манипулировать в соответствии с вашими потребностями.

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

В моем диалоговом окне редактирования было слишком много полей и стало слишком высоким , поэтому мне пришлось поместить поля бок о бок в 2 столбца . Я сделал это следующим образом:

Я пробовал различные способы, используя wrap () и т. Д., Но обнаружил, что значения не отправляются на сервер, если вы изменяете исходную структуру таблицы. Поэтому я просто клонировал элементы tr, поместил их в новые таблицы и спрятал старые. Я не скрывал всю таблицу, так что проверка еще будет видна. Я установил onchange на клонированных элементах, чтобы обновить старые. Это отлично работает. Параметр tableName – ваш идентификатор элемента jqgrid.

 var splitFormatted = false; function SplitFormatForm(tableName, add) { if (!splitFormatted) { splitFormatted = true; $("#FrmGrid_" + tableName).append('<table><tr><td><table id="TblGrid_' + tableName + '_A" class="EditTable" border="0" cellSpacing="0" cellPadding="0" /></td><td><table id="TblGrid_' + tableName + '_B" class="EditTable" border="0" cellSpacing="0" cellPadding="0" /></td></tr></table>'); var cc = $("#TblGrid_" + tableName + "> tbody").children("tr").length; var s = (cc / 2) - 1; var x = $("#TblGrid_" + tableName + "> tbody").children("tr"); var i = 0; x.each(function (index) { var e = $(this).clone(); var oldID = e.attr("id") + ""; var newID = oldID; if (oldID.substring(0, 3) === "tr_") { newID = "clone_" + oldID; $(this).css("display", "none"); e.change(function () { $("#" + oldID + " > .DataTD > .FormElement").val($("#" + newID + " > .DataTD > .FormElement").val()); }); e.attr("id", newID); if (i++ < s) { $("#TblGrid_" + tableName + "_A").append(e); } else { $("#TblGrid_" + tableName + "_B").append(e); } } }); //This hack makes the popup work the first time too $(".ui-icon-closethick").trigger('click'); var sel_id = "'new'"; if (!add) { sel_id = jQuery('#'+tableName).jqGrid('getGridParam', 'selrow'); } jQuery('#'+tableName).jqGrid('editGridRow', sel_id, { closeAfterAdd: true, width: 800, afterSubmit: function (response, postdata) { return [response.responseText == 'OK', response.responseText]; } }); }} до var splitFormatted = false; function SplitFormatForm(tableName, add) { if (!splitFormatted) { splitFormatted = true; $("#FrmGrid_" + tableName).append('<table><tr><td><table id="TblGrid_' + tableName + '_A" class="EditTable" border="0" cellSpacing="0" cellPadding="0" /></td><td><table id="TblGrid_' + tableName + '_B" class="EditTable" border="0" cellSpacing="0" cellPadding="0" /></td></tr></table>'); var cc = $("#TblGrid_" + tableName + "> tbody").children("tr").length; var s = (cc / 2) - 1; var x = $("#TblGrid_" + tableName + "> tbody").children("tr"); var i = 0; x.each(function (index) { var e = $(this).clone(); var oldID = e.attr("id") + ""; var newID = oldID; if (oldID.substring(0, 3) === "tr_") { newID = "clone_" + oldID; $(this).css("display", "none"); e.change(function () { $("#" + oldID + " > .DataTD > .FormElement").val($("#" + newID + " > .DataTD > .FormElement").val()); }); e.attr("id", newID); if (i++ < s) { $("#TblGrid_" + tableName + "_A").append(e); } else { $("#TblGrid_" + tableName + "_B").append(e); } } }); //This hack makes the popup work the first time too $(".ui-icon-closethick").trigger('click'); var sel_id = "'new'"; if (!add) { sel_id = jQuery('#'+tableName).jqGrid('getGridParam', 'selrow'); } jQuery('#'+tableName).jqGrid('editGridRow', sel_id, { closeAfterAdd: true, width: 800, afterSubmit: function (response, postdata) { return [response.responseText == 'OK', response.responseText]; } }); }} 

Вызовите этот код в editOptions следующим образом:

 afterShowForm: function () { SplitFormatForm("SiteAccountsGrid", false); }