Javascript 选择2插件,不根据输入消除选项
我正在尝试将Select2插件与CodeIgniter框架结合使用。经过大量的努力,我成功地让它与AJAX数据一起工作。然而,现在它有一个奇怪的问题。即使输入完整的名称,插件也不会消除与搜索词不匹配的无关选项 下面的屏幕截图描述了这一点 Firebug控制台如下所示: 下面是我的Javascript代码以及控制器代码 Javascript:Javascript 选择2插件,不根据输入消除选项,javascript,jquery,codeigniter,twitter-bootstrap,Javascript,Jquery,Codeigniter,Twitter Bootstrap,我正在尝试将Select2插件与CodeIgniter框架结合使用。经过大量的努力,我成功地让它与AJAX数据一起工作。然而,现在它有一个奇怪的问题。即使输入完整的名称,插件也不会消除与搜索词不匹配的无关选项 下面的屏幕截图描述了这一点 Firebug控制台如下所示: 下面是我的Javascript代码以及控制器代码 Javascript: $("#mentor-typeahead").select2({ width: "100%", placeholder: "Enter
$("#mentor-typeahead").select2({
width: "100%",
placeholder: "Enter a mentor name",
maximumSelectionSize: 5,
minimumInputLength: 2,
multiple: true,
ajax: {
url: 'get_mentor_multi_list',
quietMillis: 500,
cache: true,
dataType: 'json',
results: function (data) {
return { results: data };
}
}
});
控制器
function get_mentor_multi_list($query = null)
{
$answer = array(array('id'=>1, 'text'=>'Inigo Montoya'),
array('id'=>2, 'text'=>'Zoey Deschanel'),
array('id'=>3, 'text'=>'Harry Potter'),
array('id'=>4, 'text'=>'Nicole Scherzinger'),
array('id'=>5, 'text'=>'Xerxes Mistry'),
array('id'=>6, 'text'=>'Tom Marvollo Riddle'),
array('id'=>7, 'text'=>'Light Yagami'),
array('id'=>8, 'text'=>'Vic Mackey'),
array('id'=>9, 'text'=>'Clark Kent'));
echo json_encode($answer);
}
我完全搞不清楚是什么导致了这个问题。我也尝试了这里列出的解决方案,但没有效果。任何帮助都将不胜感激
根据请求更改了AJAX调用参数,但输出保持不变
$("#mentor-typeahead").select2({
width: "100%",
placeholder: "Enter a mentor name",
maximumSelectionSize: 5,
minimumInputLength: 2,
multiple: true,
ajax: {
url: 'get_mentor_multi_list',
quietMillis: 200,
dataType: 'json',
data: function (term, page) {
return {
q: term,
page_limit: 10
};
},
results: function (data, page) {
return data;
}
}
在
ajax
部分中缺少data
函数。请参阅和中的
ajax:{
url:“http://api.rottentomatoes.com/api/public/v1.0/movies.json",
数据类型:“jsonp”,
安静百万:100,
数据:函数(术语,页码){//page是Select2跟踪的基于页码的函数
返回{
q:term,//搜索术语
页面限制:10,//页面大小
页码:第页,//页码
apikey:“ju6z9mjyajq2djue3gbvv26t”//请不要使用,这样这个示例就可以继续工作
};
},
结果:功能(数据、页面){
var more=(第*10页)
您没有正确使用ajax函数。它正在做它应该做的事情,也就是显示从get\u mentor\u multi\u list()函数返回的所有数据
为了正确执行此操作,ajax调用需要包含一个数据属性,该属性包含要发送到get\u mentor\u multi\u list()函数的参数。get_mentor_multi_list()将只返回用户正在查找的结果
如果GeTyMeTracRoMulyListSo()中的数据是静态的(即不从任何数据库中读取),则应该考虑将其添加到数据属性中,比如加载数组数据示例。
< P>最后,我自己解决了这个问题。问题在于我使用的是CodeIgniter。因此,本应通过AJAX调用的data属性传递的任何变量实际上都不会传递给控制器 我通过将Javascript代码更改为以下内容来解决此问题:function get_mentor_multi_list()
{
// model code
$query = trim($_GET['searchq']); // get the search term typed by the user and trim whitespace
if(!empty($query))
{
// retrieve data from database
}
else
{
$answer = array('id' => 0, 'text' => 'No results found');
}
echo json_encode($answer);
}
JavaScript
$('#mentor-typeahead').select2({
width: "100%",
placeholder: "Enter a mentor name",
maximumSelectionSize: 5,
minimumInputLength: 2,
multiple: true,
ajax: {
url: 'get_mentor_multi_list',
quietMillis: 200,
dataType: 'json',
data: function (term, page) {
return {
searchq: term // set the search term by the user as 'searchq' for convenient access
};
},
results: function (data, page) {
return {
results: data
};
}
}
});
控制器代码如下所示:
function get_mentor_multi_list()
{
// model code
$query = trim($_GET['searchq']); // get the search term typed by the user and trim whitespace
if(!empty($query))
{
// retrieve data from database
}
else
{
$answer = array('id' => 0, 'text' => 'No results found');
}
echo json_encode($answer);
}
这不是statc。我只是把它和虚拟数据放在控制器中,看看是否可以通过AJAX检索数据。我还尝试将数据函数放入链接中,但这并没有改变输出。你能通过添加一个数据函数来说明你的意思吗?见@stijn的答案。该数据函数将这些值传递给get\u mentor\u multi\u list()函数。然后,您可以使用这些值适当地筛选数据,并仅返回用户要求的值。@Stjin-下面是AJAX调用的修改代码。然而,输出保持不变。请告诉我我做错了什么,因为官方文档让我有点困惑。请尝试将
q
更改为query
,以匹配控制器中的参数。