Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript GetElementById在JQuery自动完成调用中不起作用_Javascript_Jquery_Jquery Autocomplete - Fatal编程技术网

Javascript GetElementById在JQuery自动完成调用中不起作用

Javascript GetElementById在JQuery自动完成调用中不起作用,javascript,jquery,jquery-autocomplete,Javascript,Jquery,Jquery Autocomplete,我在Firebug中分析了这段代码,这让我很困惑。当我调用此代码时,该行向SelectedAminities发出警报;显示正确的数据,但不包括此行 source: "/Results/GetAmenities?selected=" + selectedAmenities, 始终将SelectedAdministries显示为空字符串。为什么会这样 $(function () { var selectedAmenities = ""; function amenitiesLo

我在Firebug中分析了这段代码,这让我很困惑。当我调用此代码时,该行向SelectedAminities发出警报;显示正确的数据,但不包括此行

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。回调函数得到两个参数:[……]一个响应回调函数,它期望一个参数包含向用户建议的数据。我还必须在查询字符串中传递搜索项搜索项是请求对象的属性。。。更新了代码。我现在明白了-很好-我自己永远不会得到它。文档中包含了一些示例,展示了函数对源代码的不同用法。。。也许值得一看。