我对此代码有疑问:

$(function () {
    $('#city_input').autocomplete({
        onSelect: function (suggestion) {
            alert(suggestion.data);
            window.latlng = suggestion.data;
        }
    });

    $('#fs_input').autocomplete({
        params: { "latlng" : window.latlng, "latlng2" : '99.9999,-99.9999' },
        onSelect: function (suggestion) {
            alert(window.latlng);
        }
    });
});


这是一个自动完成脚本。首先,用户在#city_input上选择一个建议。这样做会设置window.latlng的值。

接下来,用户需要在#fs_input上选择建议。我遇到的问题是,在“ params”属性中,未设置"latlng" : window.latlng属性。仅出于测试目的,我还创建了另一个属性,在代码latlng2中可以正常运行。另外,在下面,我正在执行alert(window.latlng)来检查该值,它会警告期望值。

所以问题是,为什么没有设置"latlng" : window.latlng?也许我不应该将变量传递给对象自由属性?

最佳答案

正在设置。只是在设置时它没有任何价值。

#city_inputonSelect回调触发后,该值不是动态计算的,它是在脚本首次加载时计算一次的,这要早于分配给它的时间。

$('#city_input').autocomplete({
    onSelect: function (suggestion) {
        alert(suggestion.data);
        # you assign here, in a callback that executes some time after the page loads
        window.latlng = suggestion.data;
    }
});

$('#fs_input').autocomplete({
    # however, you *read* the value here, immediately on page load, long before `onSelect` ever runs
    # window.latlng is "undefined" at the point `params` is created.
    params: { "latlng" : window.latlng, "latlng2" : '99.9999,-99.9999' },
    onSelect: function (suggestion) {
        alert(window.latlng);
    }

});


如果希望在onSelect回调中选择的值在autocomplete中用于其他元素,则需要等待初始化自动完成,直到选择了一个值并实际可用后:

$('#city_input').autocomplete({
    onSelect: function (suggestion) {
        alert(suggestion.data);
        window.latlng = suggestion.data;

        $('#fs_input').autocomplete({
            params: { "latlng" : window.latlng, "latlng2" : '99.9999,-99.9999' },
            onSelect: function (suggestion) {
                alert(window.latlng);
            }
        });
    }
});

关于javascript - Javascript:将var传递给对象文字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29056147/

10-12 15:11