javascript - 如何在自动完成 jquery 中过滤 JSON 数组并在 JavaScript 中显示动态值?
问题描述
我已经在我的 HTML 输入字段中成功实现了 jQuery 自动完成功能,它返回一个 JSON 对象数组,我想要实现如下:
- 单击下拉列表中的一项
- 过滤此类项目的字符串以仅获取objID字符串。
所以,这是我的js代码:
$.ajax({
url: "<?php echo $pointerClass ?>.json",
type: "POST",
dataType: "JSON"
}).done(function(data){
var jsonData = data;
var arr = new Array();
var keys = Object.keys(jsonData);
for(var i=0; i<keys.length; i++){
var key = keys[i];
var jString = JSON.stringify(jsonData[key]);
arr.push(jString);
}// ./ for
console.log('arr: ' + arr[0]);
// autocomplete jquery function
$( "#ar-type-pointer-objID" ).autocomplete({
source: arr,
minLength: 1
});
});
这是我的下拉菜单的屏幕截图:
正如您在红框中看到的那样,我需要单击一个项目并仅将"objID"
值传递给我的输入字段,所以这是"qO19zg8mV4"
因为我单击了红色方块中的行。
这是单击下拉列表行后我的输入应该是什么样子:
解决方案
根据自动完成文档,您有两个有趣的事件:选择和关闭。
选择是
当从菜单中选择一个项目时触发。默认操作是将文本字段的值替换为所选项目的值
关闭是:
隐藏菜单时触发。并非每个关闭事件都会伴随着更改事件。
Select 有两个参数:
- 事件
- 用户界面
ui 是这样的对象:
item: {
label: string,
value: string
}
不知道你会从哪里得到你的 JSON,可能是价值,所以我假设......做一个 console.log 来确定它!
你应该用类似的东西重写
$( "#ar-type-pointer-objID" ).autocomplete({
source: arr,
select: function(event, ui) {
const target = event.target;
const val = JSON.parse(ui.item.value); // Check if decode is needed or is already passed as an object
jQuery(target).val(val.ObjID);
event.preventDefault();
return false;
}
});
我们阻止默认设置,因为“默认操作是将文本字段的值替换为所选项目的值”。并且您在输入字段中的更改将丢失。您仍然需要自己管理一些信息,但这个想法应该足够了!
推荐阅读
- firebase - Firebase 计费:额外的每日阅读量会累积吗?是否首先使用免费阅读?
- postman - Postman - 从一个 JSON 中获取属性和值来创建另一个 JSON
- ios - 航行时使用 kCLLocationBestForNavigation 最小化速度变化
- sql - 我如何将此数组映射转换转换为 SQL?
- node.js - 我的 Node.js 应用程序一键部署解决方案(带 pm2)
- datastax - 旧的 datastax 企业 tarball 下载?
- javascript - 在浏览器中的 React 中将 base64 编码的 jpeg 转换为 png
- aspectj - 切入点表达式“if()”包含不受支持的切入点原语“if”
- bash - 卷曲多个 for 循环
- mysql - 如何在sql中查找“脏”状态床和“已完成”状态床之间的时间差异