javascript - 如何在调用函数后动态更改变量
问题描述
我用一组预定义的值创建了一个 jQuery 自动完成。
$(function() {
var foo = [
"bar",
"baz"
];
$( "#foo-teszt" ).autocomplete({ source: foo });
});
我想做的是,如果用户更改国家/地区,则名称会在 foo. 最初它可以工作,但是当我使用 AJAX 调用来更改变量时。但是,即使在那之后,变量仍然保持不变。(我猜是因为该函数不会每次都查看变量,而是仅加载一次并重用 foo 第一次调用时的状态。)
所以我尝试调用 foo 和 foo-teszt 自动完成功能,希望它能重新加载 foo 的内容。我试过了
$( function() {
var foo = [
"bar",
"baz"
];
$( "#foo-teszt" ).autocomplete({ source: foo });
})();
并为函数命名并使用国家/地区选择 onChange 调用它,但它们都不起作用,我仍然得到初始值。
我正在寻找这个:
用户从选择中选择一个国家。
它的 onchange 进行 AJAX 调用,返回该国家/地区可用城市的列表。
并且输入字段将使用返回的 AJAX 值加载新的自动完成。(这是不工作的部分。HTML 源代码脚本更改为正确的形式,但自动完成未加载新变量。)
我也试过这个,虽然它最初仍在运行,但在 AJAX 调用之后,我仍然没有使用 onchange 调用它,也没有在 AJAX 本身内调用它。
AJAX 就是这样的 jQuery。
$.ajax({ //jadajada
url: "url",
type: "post", //send it through get method
data: {
method: "baz",
foo: bar
},
success: function(response) {
document.getElementById("bal").innerHTML = response;
},
error: function(xhr) {
//Do Something to handle error
}
});
解决方案
您可以检查自动完成文档 API,您会找到动态更改数据源的方法:
https://api.jqueryui.com/autocomplete/#option-source
$( ".selector" ).autocomplete( "option", "source", [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ] );
对于您的情况,初始化自动完成,然后执行将返回一组新选项的请求:
$( function() {
var foo = [
"bar",
"baz"
];
$( "#foo-teszt" ).autocomplete({
source: foo
});
});
像这样的东西:
$.ajax({ //jadajada
url: "url",
type: "post", //send it through get method
data: {
method: "baz",
foo: bar
},
success: function(myNewSource) {
$("#foo-teszt").autocomplete('option', 'source', myNewSource)
}
});
编辑:添加工作示例
$(function() {
var json_data = JSON.stringify(["zz", "zzz", "sdf"]);
var availableTags = [
"ab",
"abc",
"ac"
];
$("#tags").autocomplete({
source: availableTags,
search: null
});
$("#btn").on("click", function(e) {
$.ajax({
type: "POST",
url: '/echo/json/',
data: {
json: json_data,
delay: 0
},
success: function(response) {
console.log(response);
$("#tags").autocomplete({
source: response,
search: null
});
},
dataType: "JSON"
});
});
});
推荐阅读
- sql-server - 在 SQL 中声明标量变量错误 - SSMS
- vue.js - 使用其他浏览器时如何在 Vue.js 中设置警报?
- mysql - 在动态日期上增加行索引并与其他表联合
- angular - Angular中的递增/递减数字
- sql - 在 SQL 中按特定组添加具有计数和总和的列
- java - 编写一个使用线程计算忽略操作顺序的表达式的 Java 程序?
- reactjs - 将 pathPrefix 添加到 Gatsby 中的静态图像资产
- spring - 从秘密桶中提取“spring.datasouce.password”的正确方法是什么?
- docker - 无法产生消费消息
- proxysql - 通过套接字连接到 ProxySQL - “没有这样的文件或目录”