我正在根据另一个数据属性的值级联多选。
我有这个在父级的 onChanged 事件中调用的方法。父母我的意思是用ie过滤孩子
- 父 = 部门多选
- 孩子 = 员工多选。
子元素的数据属性为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
我也尝试过刷新而不是重建。