Javascript: 将 var 传递给对象字面量

Javascript: pass var to object literal

这段代码有问题:

$(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);
        }       
    });
});

这是一个自动完成脚本。首先,用户 select 对 #city_input 提出了建议。这样做,它设置了 window.latlng.

的值

接下来,用户需要select对#fs_input提出建议。我遇到的问题是,在 "params" 属性 中,未设置 "latlng" : window.latlng 属性。只是为了测试,我还创建了另一个 属性,在代码中看到,latlng2 工作正常。此外,在下方一点,我正在执行 alert(window.latlng) 来检查值并提醒预期值。

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

正在设置中。只是在你设置的那一刻没有任何价值。

该值不是在 #city_inputonSelect 回调触发后动态计算的,而是在脚本首次加载时计算一次,long 之前你曾经分配给它。

$('#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);
            }
        });
    }
});

在您的代码中,我猜测 onSelect 函数在用户选择项目之前不会执行。但是,'params' 对象是在调用 autocomplete 函数时创建的,这是立即执行的(在赋值之前)。

只有当您知道 window.latlng 的值时(即在用户选择它之后),您才需要在 #fs_input 上初始化自动完成:

$(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);
                }
            });
        }
    });
});