2014-01-09 69 views
1

這是我的多選下拉列的代碼。它按照我的預期工作,但我想在編輯模式下進行一些修改。使用表單編輯時,jqgrid多選下拉菜單

{ 
    name: 'SubjectId', 
    index: 'SubjectId', 
    align: 'center', 
    hidden: true, 
    viewable: true, 
    editrules: { edithidden: true }, 
    editable: true, 
    formatter: 'select', 
    editable: true, 
    edittype: 'select', 
    editoptions: { 
     multiselect: true, 
     dataUrl: '@Url.Action("getAllSubjects", "Subject")', 
     //buildSelect: function (data) { 
     //var retValue = $.parseJSON(data); 
     buildSelect: function (data) { 
      var response, s = '<select>', i; 
      response = jQuery.parseJSON(data); 
      // s += '<option value="0">--Select Subject--</option>'; 
      if (response && response.length) { 
       $.each(response, function (i) { 
        s += '<option value="' + this.Id + '">' + this.SubjectName + '</option>'; 
       }); 
      } 
      return s + '</select>'; 
     }, 

     dataInit: function (elem) { 
      setTimeout(function() { 
       $('#SubjectId').multiselect(); 
      }, 5); 

     }, 
     multiple: true, 
    } 
}, 

但在編輯模式下,我想讓多選false.How可以做到。我不明白該怎麼做。

回答

1

首先,您的代碼有輸入錯誤:應該使用dataInit而不是ddataInit

如果您只需在添加表單中使用multiselect而不是在編輯表單中,我會建議您最好不要使用multiselect: truedataInit。而不是你可以使用beforeShowForm回調(見the documentation)。在回調內部,您可以設置multiple屬性(請參閱jQuery.attr)並致電$('#SubjectId').multiselect();。如果您只爲「添加」表單指定beforeShowForm回叫,則應該具有所需的行爲。對於添加和編輯表單,您應該使用recreateForm: trueproperty

+0

在add選項我用以下,但無法正常運行{ recreateForm:真實, closeOnEscape:真實, reloadAfterSubmit:真實, closeAfterAdd:真實, beforeShowForm:函數(){$ .attr($(」 #SubjectId')。multiselect() ) –

+1

@janina:1)你應該設置'$('#SubjectId')。attr(「multiple」,「multiple」);'的'multiple'屬性。代碼'$ .attr($('#SubjectId')。multiselect())'是完全錯誤的。 2)你使用'buildSelect'。所以'$('#SubjectId')。multiselect();'的調用應該在'setTimeout'內部,並且'beforeShowForm'的全部內部。 – Oleg