2013-12-16 64 views
0

我正嘗試在jqgrid編輯中動態地填充多選下拉列表。 jqgrid有兩個下拉,即角色和角色類型。角色類型選項應根據在角色中選擇的選項進行更改。但是,儘管ajax調用在角色下拉更改事件上獲取了新值,但角色類型不會刷新。代碼如下:在jqgrid中動態刷新多選下拉列表編輯

var selRoleVal; 

var mygrid = $("#MyGrid"), 
     ... 
    , getRoleTypes = function() { 
     var roleTypeData; 

     $.ajax({ 
      type: "POST", 
      url: "Page/GetDefinitions",    
      data: "{'roleID': '" + selRoleVal + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      async: false, 
      success: function (json) { 
       roleTypeData = json; 
      }, 
      error: function (json) { 
       alert("Failed ..."); 
      } 
     }); 
     return roleTypeData; 

    } 

    , setRoleTypeValues = function (role) { 

     mygrid.jqGrid('setColProp', 'RoleType', { 
      editoptions: { 
       value: function (elem) { 
        var roleTypeData; 

        roleTypeData = getRoleType(); 
        return roleTypeData; 
       } 
       , recreateForm: true 

      } 

     }); 

    }; 



mygrid.jqGrid({ 
     ...,    
     colNames: ['ID', 'Role', 'Role Type'], 
     colModel: [ 
        { name: 'id', index: 'id', width: 20, editable: false,  editoptions: { readonly: true, size: 1 } },       
        { 
         name: 'RoleName', index: 'RoleName', align: "center", width: 80, sortable: true, editable: true, edittype: "select", stype: "select", 
         searchoptions: { 
          value: RoleList 
         }, 
         editoptions: { 
          value: RoleList, 
          dataInit: function (elem) { 
           selRoleVal = $(elem).val(); 
          }, 
          dataEvents: [{ 
           type: 'change', 
           fn: function (e) { 
            selRoleVal = $(e.target).val(); 
            setRoleTypeValues($(e.target).val()); 
           } 
          }] 

         } 
        }, 
        { 
         name: 'RoleType', index: 'RoleType', width: 100, sortable: true, editable: true, edittype: "select", 
         editoptions: { 
          value: getRoleType 
           , 
          dataInit: function (elem) { 
            $(elem).multiselect({ 
             minWidth: 80, 
             height: 200, 
             selectedList: 10, 
             checkAllText: "Check all", 
             uncheckAllText: "Uncheck all", 
             noneSelectedText: "Any", 
             open: function() { 
              var $menu = $(".ui-multiselect-menu:visible"); 
              $menu.width("auto"); 
              return; 
             } 


            }) 

            $(elem).multiselect('refresh'); 

          }, 
          multiple: true 
         } 
        } 

     ], 
     rowNum: 20, 
     rowList: [20, 40, 60], 
     ... 
     editurl: ... 

     .... 

    }).jqGrid('navGrid', '#MyPager', { 
     .... 
     , edit: true 
     , add: true 
     , del: true 
     , search: false 
     , recreateForm: true 
    }) 

我應該包含什麼來刷新roletype下拉菜單?

回答

1

查看http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules討論部分的第一項,它演示瞭如何引用角色選擇中的角色類型選擇。嘗試這樣的事情。

setRoleTypeValues = function (roleSelect, role) { 

    var roleTypeSelect = roleSelect.closest("tr").find("select#RoleType"); 
    roleTypeSelect.empty().html(roleTypeDataOptionsAsHtml); 
    roleTypeSelect.multiselect('refresh'); 
    }); 

}; 

       { 
        name: 'RoleName', index: 'RoleName', align: "center", width: 80, sortable: true, editable: true, edittype: "select", stype: "select", 
        searchoptions: { 
         value: RoleList 
        }, 
        editoptions: { 
         value: RoleList, 
         dataInit: function (elem) { 
          selRoleVal = $(elem).val(); 
         }, 
         dataEvents: [{ 
          type: 'change', 
          fn: function (e) { 
           selRoleVal = $(e.target).val(); 
           setRoleTypeValues($(e.target), $(e.target).val()); 
          } 
         }] 

        } 
       }, 

希望是有道理的。

+0

感謝您的回覆。我在[此鏈接]使用多選控件(http://www.erichynds.com/blog/jquery-ui-multiselect-widget)。我通過在角色列的dataevents中構建了一個select html來嘗試你的建議方法;但是,下拉菜單並未刷新。可能它必須採取控制措施的方式。我用'var roleTypeCtrl = $(「select#RoleType」); roleTypeCtrl.empty()。html(roleTypeOptions);' – kanu

+0

這將工作,但我選擇使用roleSelect.closest(「tr」)。find(「select#RoleType」);因爲它可能在同一時間有兩行可編輯。 – Sumit

+0

無法找到正確的控件。所以用'var rowid = mygrid.jqGrid('getGridParam','selrow'); $(「select [id ='」+ rowid +「_RoleType']」)。empty()。append(roleTypeOptions).multiselect();'按照firefox的螢火蟲來獲得正確的元素。感謝您的想法! – kanu