我决定在我的多选搜索过滤器中实现select2,我可以帮忙整合它。
我有以下方法:
public function getContactByName($name)
{
return Contact::select(array('id', DB::raw('concat(first_name," ",last_name) as name')))->where(DB::raw('concat(first_name," ",last_name)'), 'like', "%$name%")->get();
}
此方法返回“first_name”和“last_name”类似于在网址中输入的字词的所有记录,例如http://www.example.com/admin/get-contact-name/ {name}。
以下路由处理请求:
Route::get('admin/get-contact-name/{name}', 'AdminContactListController@getContactByName');
这一切都很棒。我只需要一些帮助来设置select2和AJAX。我不确定在JS的选项中放什么。
我有以下表单字段设置:
<input name="contact_names_value" type="text" class="input-medium contact_names_value" id="contact_names_value">
任何人都可以指出我正确的方向。欢呼声。
编辑:我喜欢在这里玩,在黑暗中拍摄,因为我不确定每个元素的含义,例如页面等,但这是我的代码到目前为止,足以说它不起作用了:
var name = $('#contact_names_value').val();
$('#contact_names_value').select2({
placeholder: 'Search contacts',
minimumInputLength: 3,
ajax: {
url: '/admin/get-contact-name' + name,
dataType: 'json',
data: function (term, page) {
return {
q: term,
page_limit: 10
};
},
results: function (data, page) {
return {results: data};
}
},
});
编辑:好的伙计们,我想我离我更近了,我想我现在通过select2获得了结果,但我收到了一个JavaScript错误。这是我到目前为止所拥有的。
方法:
public function getContactByName()
{
$name = Input::get('name');
return Contact::select(array('id', DB::raw('concat(first_name," ",last_name) as name')))->where(DB::raw('concat(first_name," ",last_name)'), 'like', "%$name%")->get();
}
路线:
Route::get('admin/get-contact', 'AdminContactListController@getContactByName');
Select2 JavaScript:
$('#contact_names_value').select2({
name: $('.select2-input').val(),
placeholder: 'Search contacts',
minimumInputLength: 3,
ajax: {
url: '/admin/get-contact' + name,
dataType: 'json',
data: function (term) {
return {
name: term
};
},
results: function (data) {
return {results: data};
},
dropdownCssClass: 'bigdrop'
},
});
Select2 JS错误:
Uncaught TypeError: Cannot call method 'toUpperCase' of undefined plugins.js:1549
C plugins.js:1549
a.fn.select2.defaults.formatResult plugins.js:1550
g plugins.js:1549
a.extend.populateResults plugins.js:1549
f.query.callback plugins.js:1549
(anonymous function) plugins.js:1549
a.extend.success plugins.js:1549
c jquery-1.9.1.min.js:3
p.fireWith jquery-1.9.1.min.js:3
k jquery-1.9.1.min.js:5
r
任何建议人员?
答案 0 :(得分:1)
好的,我现在的工作就像一个魅力。
这是我的JS代码:
$('#contact_names_value').select2({
placeholder: 'Search contacts',
minimumInputLength: 3,
ajax: {
url: '/admin/get-contact',
dataType: 'json',
data: function (term, page) {
return {
contact_names_value: term
};
},
results: function (data, page) {
return {results: data};
}
},
tags: true
});
我不需要'name'变量引用,因为插件处理它并将select / input的值附加到查询字符串。
其次,在我的表单中,我需要将类型设置为“隐藏”,就像之前的文本一样。
您还会注意到,我在结果和数据功能中添加了“页面”。不确定这是否有所作为。
我还添加了'tags:true',使其像多选一样工作。
这是我的方法代码:
public function getContactByName()
{
$name = Input::get('contact_names_value');
return Contact::select(array('id', DB::raw('concat(first_name," ",last_name) as text')))->where(DB::raw('concat(first_name," ",last_name)'), 'like', "%$name%")->get();
}
请注意,在我的select语句中,我执行DB :: raw并将'first_name'和'last_name'字段设置为'text'。我认为这是主要问题之一,因为插件需要“id”和“text”才能运行。
我的路线很简单:
Route::get('admin/get-contact', 'AdminContactsController@getContactByName');
答案 1 :(得分:0)
您只需抓住输入框(例如,使用jQuery,您可以执行$(&#39;#contact_names_value&#39;)或javascript是document.getElementById(&#39; contact_names_value&#39;)。)
应该有效的例子:
$('#contact_names_value').select2(your_value_from_getContactByName_method_here);
希望有所帮助。