我指的是JörnZaefferer的jQuery Autocomplete v1.1插件[来源:http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/],因为这个插件似乎有很多变种。
我正在尝试在用户开始输入时将其他参数传递给服务器,因为我有多个字段需要自动填充以提供建议。
除了查询之外,我想将输入名称属性发送到服务器,但我似乎无法在extraParams中使用$(this).attr('name')。
我的jQuery:
$('.ajax-auto input').autocomplete('search.php', {
extraParams: {
search_type: function(){
return $(this).attr('name');
}
}
})
这是我的HTML。
<form method="post" action="#" id="update-form" autocomplete="off">
<ol>
<li class="ajax-auto">
<label for="form-initials">Initials</label>
<input type="text" id="form-initials" name="initials" />
</li>
<li class="ajax-auto">
<label for="form-company">Company</label>
<input type="text" id="form-company" name="company" />
</li>
</ol>
</form>
有什么建议吗?
答案 0 :(得分:46)
我正在使用自动完成功能,该功能现在是jquery ui的一部分。 传递'extraParams'字段不起作用,但您可以在请求查询字符串中附加值。
$(document).ready(function() {
src = 'http://domain.com/index.php';
// Load the cities straight from the server, passing the country as an extra param
$("#city_id").autocomplete({
source: function(request, response) {
$.ajax({
url: src,
dataType: "json",
data: {
term : request.term,
country_id : $("#country_id").val()
},
success: function(data) {
response(data);
}
});
},
min_length: 3,
delay: 300
});
});
答案 1 :(得分:4)
试试这个:
$('.ajax-auto input').setOptions({
extraParams: {
search_type: function(){
return $(this).attr('name');
}
}
})
另见here
答案 2 :(得分:2)
你可以像这样使用内置的jquery ui自动完成:
$(function() {
$("#BurroughName").autocomplete({
minLength: 0,
source: function( request, response) {
$.ajax({
url: "/JsonData/GetBurroughFromSearchTermJson",
dataType: "json",
data: {
term: request.term,
CityId: $("#CityId").val()
},
success: function( data ) {
response( data );
}
});
},
select: function( event, ui) {
$("#BurroughId").val(ui.item.id);
if (ui.item.id != null) {
var cityId = $('#CityId').val();
$.getJSON("/AdSales/City.mvc/GetCityJSONListFromBrand", { burroughId: ui.item.id }, function(data) {
$("#CityId").fillSelect(data);
var foo = $("#CityId option[value=" + cityId + "]");
if(($("#CityId option[value=" + cityId + "]").length > 0) && cityId != "")
{
$("#CityId").val(cityId);
}
});
}
$('#burroughSpinner').fadeOut('slow', function(){});
}
});
});
以下是他们的jsonp示例:http://jqueryui.com/demos/autocomplete/#remote-jsonp
答案 3 :(得分:2)
我遇到了类似的问题......不知道它是否适合你......
我试过
$("#awbCusName").autocomplete("getOracleCus.php?",{
extraParams: {
ZONE: function() { return $("#awbZone").val(); },
SE: function() { return $("#awbSE").val(); },
WSC: function() { return $("#awbWSC").val(); }
},
delay:200,
selectOnly:true,
cacheLength:0,
autoFill:true,
matchSubset:true,
minChars:1
});
CACHELENGTH:0诀窍
由于
答案 4 :(得分:1)
虽然不太理想,但我已经攻击/修改了插件以使其适合我。
简单地说,我已经改变了插件中的AJAX jQuery功能。
第363行,你会看到:
$.ajax({
// try to leverage ajaxQueue plugin to abort previous requests
mode: "abort",
// limit abortion to this input
port: "autocomplete" + input.name,
dataType: options.dataType,
url: options.url,
data: $.extend({
q: lastWord(term),
search_type: $(input).attr('name'), // my mod to pickup multiple fields
limit: options.max
}, extraParams),
success: function(data) {
var parsed = options.parse && options.parse(data) || parse(data);
cache.add(term, parsed);
success(term, parsed);
}
});
我仍然在寻找一个优雅的解决方案,所以请随时保留建议。
答案 5 :(得分:1)
jQuery( "#jac" ).autocomplete({
source: autocompleteURL,
minLength: 2,
search: function( event, ui ) {
// update source url by adding new GET params
$(this).autocomplete( 'option', 'source', autocompleteURL + 'var1=aaa&var2=bbb' );
}
})
使用jquery.ui.autocomplete 1.8.17
为我工作答案 6 :(得分:1)
在JQuery 1.7.something中使用自动完成...
使用aspx数据网格:我需要自动完成以触发任何选择的记录,但根据输入的值使用不同的种子数据。我还需要在数据网格上的记录中显示另外两个字段,以获取自动完成的数据。 我需要引用的字段都有自己的类名。
$(".AutoSearch").autocomplete({
DateTime: "",
Maker: "",
search: function (event, ui) {
DateTime = $(this).parent().parent().parent().find(".DateTime").text();
Maker = $(this).parent().parent().parent().find(".Maker").text();
},
source: function (request, response) {
$.ajax({
type: "POST",
dataType: "json",
url: "AutoList.aspx/GetListOfAutos",
data: "{ " +
"'DateTime': '" + DateTime + "', " +
"'Maker': '" + Maker + "', " +
"'SearchSeed': '" + request.term + "', " +
"'NumberToRetrieve': '" + 100 + "'" +
" }",
contentType: "application/json; charset=utf-8",
success: function (data) {
response($.map(data.d, function (item) {
return {
label: item.Description,
value: item.Number
}
}));
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("There was an error retrieving the Data.");
}
});
},
change: function (event, ui) {
$(this).parent().parent().parent().parent().parent().parent().css("background-color", "#EEC900");
$(this).parent().parent().parent().parent().parent().parent().find(".chkReadyExport").find("input:checkbox").prop("checked", false);
},
select: function (event, ui) {
this.value = ui.item.value;
return false;
},
minlength: 6,
open: function () {
$(this).removeClass("ui-corner-all").addClass("ui-corner-top");
},
close: function () {
$(this).removeClass("ui-corner-top").addClass("ui-corner-all");
}
});
}
我添加了两个属性; DateTime和Maker然后使用search:在自动完成触发源之前触发:我能够从我所在的行获取所需的数据。这为我提供了一种很好的方法,可以将所有搜索和额外数据项保存在一个地方。
.parent()。parent()等是因为我有多行表来在gridview中显示我的数据,我需要遍历树然后找到我正在查找的文本框或标签for和更改已更改数据的行的背景颜色。我不擅长使用jQuery查找项目,因此还有parent.parent ... thing。
答案 7 :(得分:1)
关于投票最多的答案,我认为只需将额外的请求值附加到源网址就可以实现更简单的语法。
此:
$("#city_id").autocomplete({
source: src+"?country_id="+$("#country_id").val().
min_length: 3,
delay: 300
});
与:
相同$("#city_id").autocomplete({
source: function(request, response) {
$.ajax({
url: src,
dataType: "json",
data: {
term : request.term,
country_id : $("#country_id").val()
},
success: function(data) {
response(data);
}
});
},
min_length: 3,
delay: 300
});
假设src是一个url字符串。
答案 8 :(得分:0)
我不确定为什么它不起作用。
但您可以先检查/调试$(this).attr('name')
的值。
另外还有 here explained [在选项标签中],您可以查看 Firebug 以查看ajax发布请求(针对网址及其数据)这将有助于您解决问题。
答案 9 :(得分:0)
首先使用.each,然后你可以使用$(this)并将你需要的任何内容设置到一个变量中。结果变量可以在自动完成中使用
$(".autosuggest").each(function (index, object) {
var autosuggestType = $(this).attr("autoSuggestType");
$(this).autocomplete("url",
{
extraParams: {
autoSuggestType: autosuggestType
},
答案 10 :(得分:0)
我遇到了同样的问题,但奇怪的是,只有自动完成插件的缩小版本。当我使用非缩小版本时,它可以工作。我还没有看过缩小版本,看看有什么区别。
答案 11 :(得分:0)
尝试
$( "#ricerca" ).autocomplete({
source: "response.php?param=param",
minLength: 2
});
答案 12 :(得分:0)
我知道它已经得到了解答。但我希望这将有助于将来的某些人,并节省大量的时间和痛苦。
ZipFile
完整代码如下:这是我为文本框做的,使其在CiviCRM中自动完成。希望它可以帮助某人
(you can replace 'CRM.$' with '$' or 'jQuery' depending on your jQuery version)
关于我如何在自动完成中将数据返回到此jquery ajax调用的PHP代码:
CRM.$( 'input[id^=custom_78]' ).autocomplete({
autoFill: true,
select: function (event, ui) {
var label = ui.item.label;
var value = ui.item.value;
// Update subject field to add book year and book product
var book_year_value = CRM.$('select[id^=custom_77] option:selected').text().replace('Book Year ','');
//book_year_value.replace('Book Year ','');
var subject_value = book_year_value + '/' + ui.item.label;
CRM.$('#subject').val(subject_value);
CRM.$( 'input[name=product_select_id]' ).val(ui.item.value);
CRM.$('input[id^=custom_78]').val(ui.item.label);
return false;
},
source: function(request, response) {
CRM.$.ajax({
url: productUrl,
data: {
'subCategory' : cj('select[id^=custom_77]').val(),
's': request.term,
},
beforeSend: function( xhr ) {
xhr.overrideMimeType( "text/plain; charset=x-user-defined" );
},
success: function(result){
result = jQuery.parseJSON( result);
//console.log(result);
response(CRM.$.map(result, function (val,key) {
//console.log(key);
//console.log(val);
return {
label: val,
value: key
};
}));
}
})
.done(function( data ) {
if ( console && console.log ) {
// console.log( "Sample of dataas:", data.slice( 0, 100 ) );
}
});
}
});