別のデータ属性の値に基づいて複数選択をカスケードする作業を行っています。
親の 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
また、再構築する代わりに更新しようとしました。