我有这个代码,我在Firebug中进行过分析,这让我很困惑。当我调用此代码时,行alert(selectedAmenities);
显示正确的数据,但此行
source: "/Results/GetAmenities?selected=" + selectedAmenities,
始终将selectedAmenities
显示为空字符串。这是为什么?
$(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);
}
});
});
答案 0 :(得分:1)
当我调用此代码时,行
alert(selectedAmenities);
会显示正确的数据
然后getElementById
完全正常。
该行
source: "/Results/GetAmenities?selected=" + selectedAmenities
执行之前您致电amenitiesLog(ui.item.value);
并且只执行一次。
在您阅读selectedAmenities
时,它是一个空字符串,稍后更改该值不会更新"/Results/GetAmenities?selected=" + selectedAmenities
。
如果我有
var foo = '42';
var bar = 'answer' + foo;
foo = '21';
然后bar
保持'answer42'
,它不会随foo
而改变。 bar
包含一个字符串,与变量foo
无关。
而不是使用URL作为源,似乎你应该使用回调。请查看documentation中的概述部分。类似的东西:
$("#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/GetAmenities?selected=" + selectedAmenities
。