javascript - 选择 2 : cannot read property query of null

标签 javascript jquery ajax jquery-select2

我已经创建了这样的 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>

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

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

Uncaught TypeError: Cannot read property 'query' of null

这个问题我还是不太明白。

最佳答案

您必须已经在您提供的代码片段之前的某处初始化了 select2,否则我希望 select2:open 监听器永远不会触发并导致您的问题。当我用 fiddle 复制这种情况并查看 select2 源代码时,select2 似乎在提示 dataAdapter 为空,这一定是这个双 select2() 调用的副作用,或者.select2() 调用在具有意外上下文的监听器内部...或者其他原因,没有时间或兴趣探索根本原因。

无论如何,将 .select2() 调用移出监听器(并移除空的监听器)可以解决问题。根据您的问题中可用的有限信息,似乎根本不需要使用此监听器,至少您使用它的方式是这样。一个简单的工作示例在 this 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
    }
});

作为此 #c_providers 元素的唯一 select2 初始化。

关于javascript - 选择 2 : cannot read property query of null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37016655/

相关文章:

jquery - 有没有一种方法可以将滚动条添加到顶部的 overflow-x <div> 而不是底部?

jquery - 为什么我无法使用 jQuery 在 IE 中淡出该表行?

javascript - 使用 Highchart 和 ajax 绘制动态系列和点

javascript - Redux 和 immutable js,我在尝试使用 immutable 后失去了状态

javascript - 为什么我的 React 组件不会在 Redux 存储状态发生变化时重新渲染?

javascript - 具有页面完整浏览器高度的开头部分,所有其他部分定义的高度。

javascript - 脚本未在 Ajax 回发时执行

javascript - 扩展 Marionette.js View 类的方法

javascript - 如何触发循环中创建的所有元素的onclick?

javascript - Ajax 调用一直给我 "internal server error 500"