JqGrid: отключить поля формы при редактировании
В настоящее время я разрабатываю веб-приложение, предназначенное для администрирования торговых автоматов и т.д.
Я решил использовать jQuery, jQuery UI и jqGrid для этого проекта, поэтому я могу легко обеспечить отличный и настраиваемый пользовательский интерфейс.
К сожалению, документация jqGrid довольно устарела и не охватывает все функции этого отличный плагин (потому что мне действительно нравится, хотя документация довольно плохая).
Во всяком случае, достаточно фоновой информации, я полагаю. Позвольте дойти до точки:
Я использую навигационную панель, которая встроена в jqGrid для добавления, редактирования и удаления элементов из сетки.
У меня это работает как шарм, за исключением одного: некоторые поля могут быть включены (или видимы) только при добавлении нового элемента, а не в режиме редактирования (они должны быть скрыты и/или отключены).
Пример:
Компания, с которой я работаю, продает торговые автоматы и существует несколько типов (разные размеры и прочее) этих башен. когда новая башня добавляется к месту и введенный в систему, тип должен быть установлен. Но башня не волшебным образом меняются со временем, поэтому это поле не может быть отредактировано позже.
Кто-нибудь знает, может ли это поведение быть выполнено путем изменения некоторых параметров инициализации?
Возможно, это недокументированная опция редактирования (editoptions) или форма-опция (formoptions)?
Или, может быть, у вас есть простое решение для этого?
Я хотел бы услышать ваши предложения/решения!
Спасибо =)
Ответы
Ответ 1
Вы можете реализовать свои требования по-разному. Например, внутри события beforeShowForm
вы можете скрыть или показать
jQuery("#list").jqGrid({
colModel: [
{ name: 'Name', width: 200, editable: true },
//...
}).jqGrid('navGrid','#pager', { edit: true, add: true, del: false},
{ // edit option
beforeShowForm: function(form) { $('#tr_Name', form).hide(); }
},
{ // add option
beforeShowForm: function(form) { $('#tr_Name', form).show(); }
});
где id "tr_Name" построен из префикса tr_ и "Name" - свойство name столбца из colModel
.
ОБНОВЛЕНО: в и в другом показаны один больше способов изменения свойств можно динамически сразу же после инициализации редактирования.
ОБНОВЛЕНО 2: Бесплатный jqGrid позволяет определить editable
как функцию обратного вызова или как "disabled"
, "hidden"
или "readonly"
. См. статья wiki. Это позволяет более легко реализовать те же требования.
Ответ 2
Чтобы сделать поле редактируемым или нет, это то, что я завершил кодирование после поиска ответа на некоторое время (чтобы отключить редактирование в редакции строки, но разрешить его на "Добавить" ) и не найти ответ я необходимо:
colModel :[
{name:'id', index:'id', editable:false, ...
}).navGrid("#pager",{edit:false,add:true,del:false,search:false,refresh:true},
{}, // edit
{
beforeInitData: function(formid) {
$("#list").jqGrid('setColProp','id',{editable:true});
},
afterShowForm: function (formid) {
$("#list").jqGrid('setColProp','id',{editable:false});
},
Ответ 3
Вот пример:
http://www.ok-soft-gmbh.com/jqGrid/CustomFormEdit.htm
beforeShowForm: function(form) {
$('#tr_Name', form).hide();
}
Ответ 4
Видимый, но не редактируемый:
{ // edit option
beforeShowForm: function(form) {
$('#col_name', form).attr("disabled", true);
}
}
Ответ 5
Это будет работать со свободным jqgrid, простым и простым:
Этот конкретный пример позволит редактировать только в форме "добавить":
editable: function (options) {
// Allow edit only for "add" not for "edit"
if (options.mode === "addForm")
{
return true;
}
else if (options.mode === "editForm")
{
return false;
}
else
{
return false;
}