0

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

1 回答 1

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',它不改变foobar包含一个字符串并且与变量没有任何关系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/GetAmenities?selected=" + selectedAmenities

于 2012-09-03T15:06:02.750 回答