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

时间:2016-05-04 00:46:21

标签: javascript jquery ajax 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>

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

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

  

未捕获的TypeError:无法读取属性&#39;查询&#39;为null

我仍然不明白这个问题。

1 个答案:

答案 0 :(得分:1)

您必须已经在所提供的代码段之前的某个位置初始化了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初始化。