jqGrid: отключить поля формы при редактировании - PullRequest
17 голосов
/ 04 августа 2010

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

В любом случае, я полагаю, достаточно справочной информации.Давайте подойдем к делу:
Я использую панель навигации, встроенную в jqGrid, для добавления, редактирования и удаления элементов из сетки.
У меня это работает как чудо, за исключением одного: некоторыеполя могут быть включены (или видимы) только при добавлении нового элемента, но не в режиме редактирования (они должны быть скрыты и / или отключены).

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

Кто-нибудь знает, может ли такое поведение быть достигнуто путем изменения некоторых параметров инициализации?
Возможно, этонедокументированная опция редактирования ( editoptions ) или опция формы ( formoptions )?
Или, может быть, у вас есть простое решение для этого?

IБуду рад услышать ваши предложения / решения!
Спасибо =)

Ответы [ 5 ]

36 голосов
/ 04 августа 2010

Вы можете реализовать свои требования различными способами.Например, внутри события 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(); }
          });

, где идентификатор "tr_Name" создан из префикса "tr_", а "Name" - свойство name столбца изcolModel.

ОБНОВЛЕНО : В ответ , а в еще один показан еще один способ динамического изменения свойств сразудо инициализации редактирования.

ОБНОВЛЕНО 2 : Свободно jqGrid позволяет определить editable как функцию обратного вызова или "disabled", "hidden" или "readonly".См. статью в вики .Это позволяет легче реализовать те же требования.

8 голосов
/ 12 декабря 2011

Чтобы сделать поле доступным для редактирования или нет, это то, что я запрограммировал после того, как некоторое время искал ответ (чтобы отключить редактирование при редактировании в строке, но разрешить его при добавлении) и не найти ответ.необходимо:

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});
            },
0 голосов
/ 07 марта 2017

Это будет работать с бесплатным 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;
                            }
0 голосов
/ 03 апреля 2016

Видимый, но не редактируемый:

{ // edit option
    beforeShowForm: function(form) {
        $('#col_name', form).attr("disabled", true);
    }
}
0 голосов
/ 23 октября 2012

Вот пример:

http://www.ok -soft-gmbh.com / jqGrid / CustomFormEdit.htm

                  beforeShowForm: function(form) {
                     $('#tr_Name', form).hide();
                  }
...