Javascript GetElementById在JQuery自动完成调用中不起作用
我在Firebug中分析了这段代码,这让我很困惑。当我调用此代码时,该行向SelectedAminities发出警报;显示正确的数据,但不包括此行Javascript GetElementById在JQuery自动完成调用中不起作用,javascript,jquery,jquery-autocomplete,Javascript,Jquery,Jquery Autocomplete,我在Firebug中分析了这段代码,这让我很困惑。当我调用此代码时,该行向SelectedAminities发出警报;显示正确的数据,但不包括此行 source: "/Results/GetAmenities?selected=" + selectedAmenities, 始终将SelectedAdministries显示为空字符串。为什么会这样 $(function () { var selectedAmenities = ""; function amenitiesLo
source: "/Results/GetAmenities?selected=" + selectedAmenities,
始终将SelectedAdministries显示为空字符串。为什么会这样
$(function () {
var selectedAmenities = "";
function amenitiesLog(message) {
if (!$('#amenitiesLog div:contains(' + message + ')').length) {
$("<div/>").text(message).appendTo("#amenitiesLog");
$("<br/>").text("").appendTo("#amenitiesLog");
$("#amenitiesLog").scrollTop(0);
selectedAmenities = document.getElementById("amenitiesLog").innerHTML;
alert(selectedAmenities);
}
}
$("#Amenities").autocomplete({
source: "/Results/GetAmenities?selected=" + selectedAmenities,
minLength: 3,
select: function (event, ui) {
if (ui.item != null) amenitiesLog(ui.item.value);
}
});
});
当我调用此代码时,该行向SelectedAminities发出警报;显示正确的数据
那么getElementById工作得非常好
问题
线路
source: "/Results/GetAmenities?selected=" + selectedAmenities
在调用amenitiesLogui.item.value之前执行;它只执行一次。
在您读取SelectedAminities时,它是一个空字符串,以后更改该值不会更新/Results/getcommercies?selected=+SelectedAminities
如果我有
var foo = '42';
var bar = 'answer' + foo;
foo = '21';
然后酒吧保持“answer42”,它不会随着foo而改变。bar包含一个字符串,与变量foo没有任何关系
解决方案
似乎应该使用回调,而不是使用URL作为源。请查看中的概述部分。比如:
$("#Amenities").autocomplete({
source: function(request, callback) {
var url = "/Results/GetAmenities?selected=" + selectedAmenities + '&term=' + request.term;
$.getJSON(url, callback);
},
minLength: 3,
select: function (event, ui) {
if (ui.item != null) amenitiesLog(ui.item.value);
}
});
不同之处在于,现在每当触发自动完成时,您分配给source:的函数都会被调用,并且每次都会重新计算/Results/getcommercies?selected=+selectedamerities。当您已经四次获取元素时,为什么突然需要使用纯javascript来获取元素,为什么不直接从getgo缓存它呢?当我调用此代码时,该行会提醒SelectedAminities;显示正确的数据。。。那么getElementById工作得非常好。行source:/Results/getprocilities?selected=+selectedamerities在调用ameritieslogui.item.value之前执行;它只执行一次。在您读取SelectedAminities时,它是一个空字符串,以后更改该值不会更新/Results/getcommercies?selected=+SelectedAminities。如果我有var foo='42';变量条=‘答案’+foo;foo='21';,然后bar保持“answer42”,它不会随着foo而改变。谢谢Felix-那么解决方案是什么呢?您可以使用回调来代替,自己调用Ajax。请查看文档中的概述部分:。通常,它是您为某些现有代码提供的一个函数,由该代码代表您调用。如果引用回调变量,则必须将选项传递给该函数。请看一下文档,其中描述了:第三种变体,回调,提供了最大的灵活性,可以用于将任何数据源连接到Autocomplete。回调函数得到两个参数:[……]一个响应回调函数,它期望一个参数包含向用户建议的数据。我还必须在查询字符串中传递搜索项搜索项是请求对象的属性。。。更新了代码。我现在明白了-很好-我自己永远不会得到它。文档中包含了一些示例,展示了函数对源代码的不同用法。。。也许值得一看。