jqGrid отключить раскрывающийся список, загруженный dataUrl - PullRequest
2 голосов
/ 15 февраля 2011

У меня следующая проблема:

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

Как я могу решить эту проблему?

Ответы [ 5 ]

4 голосов
/ 15 февраля 2011

Мне кажется, что самый простой способ отключить выпадающий список - это использовать событие buildSelect в опциях редактирования в дополнение к dataUrl.Если данные, возвращаемые dataUrl, уже имеют правильную форму, buildSelect может просто вернуть входной параметр обратно, но можно дополнительно отключить

. Вы также должны использовать recreateForm:true для формы, чтобы быть уверенным, чтоВсе обратные вызовы будут всегда вызываться.Схема кода может иметь следующий вид:

var needDisable=true;
$("#list").jqGrid({
    colModel:[
        {name:'myDropDown',editable: true,edittype:"select",
         editoptions:{dataUrl:'myDropDown.txt',
                      buildSelect: function(data) {
                          var field_id=this.id; // "myDropDown"
                          setTimeout(function(){
                              if (needDisable) {
                                  $('#tr_'+field_id).attr('disabled','disabled');
                              } else {
                                  $('#tr_'+field_id).removeAttr('disabled');
                              }
                          }, 100);
                          return data;
                      }
        },
        // ... other colModel columns
    ],
    // ... other jqGrid parameters
}).jqGrid('navGrid','#pager',{},
          { // Edit form parameters
              recreateForm:true,
              beforeShowForm:function(form){
                  needDisable=true;
              }
          },
          { // Add form parameters
              recreateForm:true,
              beforeShowForm:function(form){
                  needDisable=false;
              }
          });
0 голосов
/ 08 октября 2017

Для меня ответы здесь не сработали или были слишком сложными.

В моем случае я хотел дождаться, чтобы конкретный раскрывающийся список существовал и имел выбранное значение. (Но вы можете использовать другие критерии ....)

Мой выпадающий список использовал dataURL для загрузки элементов, поэтому потребовалось некоторое время, прежде чем он стал доступен на экране.

В случае, если кто-то приземлится здесь из поиска Google о том, как ждать загрузки элементов управления в в первый раз, когда форма редактирования / добавления показывает ....

Мое решение представляет собой сочетание рекурсии и setTimeout в JavaScript:

    function WaitForDropDownToBeLoadedAndProcess() {

    var dropDownVal= $("#MyDropDown").val();

    if (!dropDownVal) {//if the value is undefined called this method recursively
        setTimeout(function() {//use setTimeout to avoid blocking

            WaitForDropDownToBeLoadedAndProcess();

        }, 150);

    } else {//if the dropdown has a value

        //do your logic here... like disabling the control or set value

    }       
}

Я подключил его к сетке так:

afterShowForm:function(formid) { 

    WaitForDropDownToBeLoadedAndProcess();   
}
0 голосов
/ 08 июля 2014

Если у вас есть имя столбца с именем pid, я получил его таким образом

В редактировании

beforeShowForm:function(form)
    $("#tr_pid").find("input,button,textarea,select").attr("disabled",true);
}

В добавлении

beforeShowForm:function(form){
    $("#tr_pid").find("input,button,textarea,select").attr("disabled",false);
}
0 голосов
/ 17 января 2014

// РАБОТАЕТ: HIDE отбрасывает панель инструментов, выбирает
// $ ("#" + columnNames [i]) .hide ();

0 голосов
/ 04 марта 2011

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

Мое решение:

navigatorAddOptions и navigatorEditOptions используют beforeInitData: beforeAdd и beforeInitData: beforeEdit соответственно. beforeShowForm не работает. Оба также используют воссозданиеForm: true.

перед ... функциями:

function beforeAdd(formid) {
   $("#gridTable").jqGrid('setColProp','listfield',{edittype:'select',editoptions:{readonly:false,dataUrl:'url_to_list.action'}});
   $("#gridTable").jqGrid('setColProp','newvaluefield',{hidden:false});
};

function beforeEdit(formid) {
   $("#gridTable").jqGrid('setColProp','listfield',{edittype:'text',editoptions:{readonly:true}});
   $("#gridTable").jqGrid('setColProp','newvaluefield',{hidden:true});
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...