GetElementById无法在JQuery自动完成调用中工作

时间:2012-09-03 14:48:53

标签: javascript jquery jquery-autocomplete

我有这个代码,我在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);
        }
    });
});

1 个答案:

答案 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