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 に答える