select2:无法读取null的属性查询

select2 : cannot read property query of null

本文关键字:属性 查询 null 读取 select2      更新时间:2023-09-26

我创建了类似的javascript

$(document).on("select2:open", ".provider_suggestion", function() {
    $(this).select2({
        minimumInputLength: 2,
        ajax: {
            url: "../include/suggestion/provider_name.php",
            dataType: 'json',
            delay: 250,
            data: function(params){ return { q: params.term }; },
            processResults: function (data, page) { return { results: data }; },
            cache: true
        }
    });
});

并创建像这样的选择html输入

<select id="c_providers" name="c_providers" class="provider_suggestion" style="width:100%"></select>

当页面加载时,我单击选择输入。

我打开浏览器控制台,它提到

未捕获的类型错误:无法读取空的属性"query"

我仍然不明白这个问题。

您必须已经在提供的代码片段之前的某个位置初始化了select2,否则select2:open侦听器将永远不会触发并导致您的问题。当我在fiddle中复制这种情况并查看select2源时,select2似乎在抱怨dataAdapter为null,这一定是这个双重select2()调用的副作用,或者.select2()函数在侦听器内部有一个意外的上下文。。。或者什么,没有时间或兴趣去探究根本原因。

无论如何,将.select2()调用移出侦听器(并移除当时为空的侦听器)消除了问题。根据你的问题中提供的有限信息,似乎根本没有必要使用这个监听器,至少在你使用它的方式上是这样。这个JSfiddle是一个简单的工作示例,与原始代码唯一真正的区别是删除了监听器包装(以及对AJAX调用的嘲讽)。所以,试试

$('#c_providers').select2({
    minimumInputLength: 2,
    ajax: {
        url: "../include/suggestion/provider_name.php",
        dataType: 'json',
        delay: 250,
        data: function(params){ return { q: params.term }; },
        processResults: function (data, page) { return { results: data }; },
        cache: true
    }
});

作为该CCD_ 3元素的唯一select2初始化。