Javascript:将var传递给object literal

时间:2015-03-15 01:10:12

标签: javascript 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);
        }       
    });
});

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

的值

然后,用户需要在#fs_input上选择建议。我遇到的问题是,在“params”属性中,"latlng" : window.latlng属性未被设置。仅仅为了测试,我还创建了另一个属性,在代码latlng2中看到它正常工作。另外,稍微低一点,我正在检查值alert(window.latlng)并提醒预期值。

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

2 个答案:

答案 0 :(得分:1)

正在设定中。它只是在您进行设置时没有任何价值。

#city_input onSelect回调触发后,动态计算该值,在脚本首次加载时计算一次, long < / em>在你分配给它之前。

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

答案 1 :(得分:1)

在您的代码中,我猜测onSelect函数在用户选择项目之前不会执行。然而,&#39; params&#39;调用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);
                }
            });
        }
    });
});