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_input
的 onSelect
回调触发后动态计算的,而是在脚本首次加载时计算一次,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);
}
});
}
});
});
这段代码有问题:
$(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_input
的 onSelect
回调触发后动态计算的,而是在脚本首次加载时计算一次,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);
}
});
}
});
});