【问题标题】:select2 : cannot read property query of nullselect2 : 无法读取 null 的属性查询
【发布时间】:2016-05-04 00:46:20
【问题描述】:

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

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

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

未捕获的类型错误:无法读取 null 的属性“查询”

我还是不明白这个问题。

【问题讨论】:

  • 没有足够的信息来回答。属性名称“查询”不会出现在您提供的代码中的任何位置。它是否出现在代码的其他地方,附加到可能意外为空的对象?如果没有,它会在某处的 select2 代码中使用,并且您提供的参数无效。堆栈跟踪是否显示您自己的任何代码?那将是开始寻找的地方......
  • @Thernys 错误出现在浏览器控制台上,当我单击选择表单时。
  • 我明白这一点。浏览器控制台还应该为您提供堆栈跟踪,以希望看到问题源自代码的何处。
  • 它的错误来自插件,而不是来自我上面的代码。

标签: javascript jquery ajax select2


【解决方案1】:

您必须已经在您提供的代码 sn-p 之前的某个地方初始化了 select2,否则我希望 select2:open 侦听器永远不会触发并导致您的问题。当我在小提琴中复制这种情况并偷看 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 初始化。

【讨论】:

  • 是的@Thernys 目前我的代码是$('#c_providers').select2({}) 但我想在$(document).on("select2:open", ".provider_suggestion", function() {}) 中做它不起作用.. :(
  • @Jin 你为什么要在开放的监听器中这样做/你到底想要达到什么目的......
  • 好吧,我正在尝试使用 ajax 加载表单,并且表单包含选择输入,我想将它与 select2 一起使用,但它不适用于$(document).on("select2:open", ".provider_suggestion", function() {})
  • @Jin 请使用更多相关代码编辑您的问题。表单是如何“加载 ajax”并插入到 DOM 等的。如果您只是想用 AJAX 填充 select2 值,那么您只需要按照我的回答初始化 select2,不需要 @ 987654329@听众。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
相关资源
最近更新 更多