我已经创建了这样的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
我仍然不明白这个问题。
答案 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初始化。