2014-01-09 71 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