使用select2无法读取null的属性“查询”

时间:2019-04-29 20:35:48

标签: javascript jquery jquery-ui angularjs-directive jquery-select2

我有一个select2下拉菜单,其中我根据所选内容禁用了下拉菜单中的某些选择。因此,在select和unselect事件中,我将获取填充下拉列表的数据,将需要它的所有选项的Disabled属性设置为true,然后重新构建下拉列表。在选择事件上,这可以正常工作。在取消选择事件上,它将引发错误:无法读取null的属性“查询”。在select2库中,当它尝试访问this.dataAdapter.query时,“ this.dataAdapter”为null。

select2下拉列表的初始化代码为:

$(elem).select2({
            data: $.map(scope.teacher.classes, function (cls) {
                if (!found && cls.selected) {
                    scope.teacher.isTargeted = true;
                    scope.teacher.initTargeted = true;
                    found = true;
                }
                cls.id = cls.classId; 
                cls.text = cls.className; 
                if (cls.selected) {
                    scope.teacher.selectedClassIds.push(cls.classId);
                    scope.teacher.selectedClasses.push(cls);
                }
                return cls;
            }),
            multiple: true,
            minimumResultsForSearch: Infinity,
            width: 'auto',
        })

下拉菜单是在angular指令中构建的。在select事件中起作用的代码是

var classes = scope.teacher.classes.map(function(cls) {
     cls.id = cls.classId;
     cls.text = cls.className;
     cls.selected = scope.teacher.selectedClassIds.indexOf(cls.classId) > -1;
     cls.disabled = scope.teacher.selectedClassIds.length == 0 ? false : cls.semester == semester ? false : true
     return cls;
});
$(elem).select2().empty()
$(elem).select2({data: classes, width: 'auto'}).trigger('change');

在unselect事件中,除了在select2对象上设置containerCssClass属性并且在此处引发错误之外,都使用了相同的代码。

var classes = scope.teacher.classes.map(function(cls) {
    cls.id = cls.classId;
    cls.text = cls.className;
    cls.selected = scope.teacher.selectedClassIds.indexOf(cls.classId) > -1;
    cls.disabled = scope.teacher.selectedClassIds.length == 0 ? false : cls.semester == semester ? false : true
    return cls;
});
$(elem).select2().empty()
$(elem).select2({data: classes, width: 'auto', containerCssClass: scope.teacher.selectedClassIds.length > 0 ? '' : 'has-error_within required'}).trigger('change');

更新

在仔细研究了问题以确定错误原因之后,我发现仅在单击显示的所选选项上的x时才会发生错误。如果我打开下拉菜单并取消选择该选项,则不会收到错误消息。我已经尝试使用4.0.3、4.0.5和4.0.6版本。

1 个答案:

答案 0 :(得分:0)

我在select2问题列表中发现了相同的问题,但已关闭且未解决。这似乎是一个错误,但是该线程中的变通方法是在更改数据之前调用open事件。

values()