0

別のデータ属性の値に基づいて複数選択をカスケードする作業を行っています。

親の onChanged イベント内で呼び出されるこのメソッドがあります。親とは、つまり、子をフィルタリングするものを意味します

  • 親 = 部門の複数選択
  • 子=スタッフ複数選択。

子要素の data 属性はdata-departmentidです。

function cascadeMultiselect(control, targetControl, key) {
         this.control = control;
         this.targetControl = targetControl;
         this.key = key;
         this.toHide = [];
         this.toShow =[];
         //Get controls selectedIds
         this.selectedIds = function() {
             var selected = [];
             _.each($(this.control + " option:selected"), function(c) {
                 selected.push($(c).val());
             });
             return selected;
         };

         //Now filter 
         this.filter = function() {

             //Get target control attribute values
             _.each($(targetControl + " option"), function(tc) {
                 //Use the val as an identifier
                 var val = $(tc).val();
                 var data = $(tc).attr("data-" + key);
                 data = data.split(",");

                 var isMatch = anyMatchInArray(data, this.selectedIds());

                 if(!isMatch){
                   $(tc).hide();
                 }
             });
         }

          this.filter();

          $(targetControl).multiselect('rebuild');           
     }

それは次のように呼ばれています:

 onChange: function() {
             cascadeMultiselect('#departmentlist', '#stafflist', "DepartmentID");
         }

問題は、要素を非表示にできないことです。フィルターは問題なく動作します。私は試しました:

$(tc).hide(); // tc = targetControl option

また、再構築する代わりに更新しようとしました。

4

1 に答える 1