我有 Fiddle here
如果选择了choice1单选按钮,我需要availabletags1作为源,如果选择了choice2单选按钮,我需要availabletags2。 我需要通过实际的用户选择动态地改变它。
CODE:
var availableTags1 = [
"ActionScript",
"AppleScript",
"Asp"
];
var availableTags2 = [
"Python",
"Ruby",
"Scala",
"Scheme"
];
$( "#autocomplete" ).autocomplete({
source: availableTags1
});
$('input[name="choice"]').click(function(){
if(this.checked){
if(this.value == "1"){
$( "#autocomplete" ).autocomplete('option', 'source', availableTags1)
} else {
$( "#autocomplete" ).autocomplete('option', 'source', availableTags2)
}
答案 0 :(得分:27)
尝试
$('input[name="choice"]').click(function(){
if(this.checked){
if(this.value == "1"){
$( "#autocomplete" ).autocomplete('option', 'source', availableTags1)
} else {
$( "#autocomplete" ).autocomplete('option', 'source', availableTags2)
}
}
})
演示:Fiddle
答案 1 :(得分:19)
对于2016年及以后阅读此内容的人来说,使用request/response
模式有更好的方法。 jQuery自动完成具有source
选项,该选项接受一个函数,该函数在插件调用时将接收两个参数:request
和response
。 request
是一个对象,包含有关自动完成组件的信息,即request.term
,它是输入字段的值。 response
是一个函数,接受单个参数,即返回的数据response(data)
。正如您在下面的示例中所看到的,您可以使用此选项来促进ajax请求。您可以简单地将request
函数作为成功回调传递给jQuery $.ajax
方法,它将按预期工作。您还可以使用此模式执行其他很酷的操作,例如,如果您已经获取并缓存了一些数据,则在内存中搜索,从而使后续搜索更加实时。
$('#term-search').autocomplete({
source: function(request, response) {
$.ajax({
url: $('#api-endpoint').val(),//whether you are using radios, checkboxes, or selects, you can change the endpoint at runtime automatically
dataType: "json",
data: {
query : request.term,//the value of the input is here
language : $('#lang-type').val(), //you can even add extra parameters
token : $('#csrf_token').val()
},
success: response //response is a callable accepting data parameter. no reason to wrap in anonymous function.
});
},
minLength: 1,
cacheLength: 0,
select: function(event, ui) {} //do something with the selected option. refer to jquery ui autocomplete docs for more info
});
答案 2 :(得分:0)
在我的情况下,我想更改source
函数中的源数据,并在responce()之前对它们进行突变。所以我只是将一个全局变量(放到全局执行上下文中)以便第二次更改全局var的值...
示例:
....
var jsonData = null;
....
// maybe inside a listener the code below
if (cond1) {
jsonData = ['item1','item2'];
else {
jsonData = ['anotherItem1', 'anotherItem2'];
}
....
$("#query").autocomplete({
source: function(request, response) {
if (request.term.length > 2) {
var matches = $.map(jsonData, function(item) {
// code code code ...
if (maybeSomeCondition) {
return item;
}
});
response(matches);
}
},
//