我遇到了这段代码的问题:
$(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
?也许我不应该将变量传递给对象自由属性?
答案 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);
}
});
}
});
});