- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从数据库提供数据,因此我通过链接示例以 JSON 格式发送数据:-127.0.0.1:8000/test 运行良好但我想在这段代码中使用 JSON 格式的数据 https://www.w3schools.com/howto/howto_js_autocomplete.asp而不是 var 国家/地区
此代码是提供我的w3school(自动完成java脚本代码)
我的测试 API 输出:
"[{\"model\": \"core.newcarmodel\", \"pk\": 1, \"fields\": {\"car_model_new\": \"swift\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 2, \"fields\": {\"car_model_new\": \"wagonr\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 3, \"fields\": {\"car_model_new\": \"baleno\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 4, \"fields\": {\"car_model_new\": \"breeza\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 5, \"fields\": {\"car_model_new\": \"spresso\"}}]"
使用 var myArr = JSON.parse(this.responseText) 解析后;
[{"model": "core.newcarmodel", "pk": 1, "fields": {"car_model_new": "swift"}}, {"model": "core.newcarmodel", "pk": 2, "fields": {"car_model_new": "wagonr"}}, {"model": "core.newcarmodel", "pk": 3, "fields": {"car_model_new": "baleno"}}, {"model": "core.newcarmodel", "pk": 4, "fields": {"car_model_new": "breeza"}}, {"model": "core.newcarmodel", "pk": 5, "fields": {"car_model_new": "spresso"}}]
最佳答案
您可以使用映射函数,迭代数组并检索数组中的模型名称。我已经更新了我的答案,并在您发出 AJAX 请求的地方添加了内嵌注释。我还展示了您的数据有什么问题。希望它能解决您的问题。如果修复的话请告诉我。
/* This is the dataset provided by you. It is like JSONed twice. The best solution would be change into JSON. */
var myArr = "[{\"model\": \"core.newcarmodel\", \"pk\": 1, \"fields\": {\"car_model_new\": \"swift\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 2, \"fields\": {\"car_model_new\": \"wagonr\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 3, \"fields\": {\"car_model_new\": \"baleno\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 4, \"fields\": {\"car_model_new\": \"breeza\"}}, {\"model\": \"core.newcarmodel\", \"pk\": 5, \"fields\": {\"car_model_new\": \"spresso\"}}]";
/* You should convert it into JSON like below. No need of extra quotes around the array and unnecessary backspaces. Commenting below code as you want to work with your own data. */
/*
var myArr = [
{"model": "core.newcarmodel", "pk": 1, "fields": {"car_model_new": "swift"}},
{"model": "core.newcarmodel", "pk": 2, "fields": {"car_model_new": "wagonr"}},
{"model": "core.newcarmodel", "pk": 3, "fields": {"car_model_new": "baleno"}},
{"model": "core.newcarmodel", "pk": 4, "fields": {"car_model_new": "breeza"}},
{"model": "core.newcarmodel", "pk": 5, "fields": {"car_model_new": "spresso"}}
]
*/
function autocomplete(inp, arr) {
/*the autocomplete function takes two arguments,
the text field element and an array of possible autocompleted values:*/
var currentFocus;
/*execute a function when someone writes in the text field:*/
inp.addEventListener("input", function(e) {
var a, b, i, val = this.value;
/*close any already open lists of autocompleted values*/
closeAllLists();
if (!val) { return false;}
currentFocus = -1;
/*create a DIV element that will contain the items (values):*/
a = document.createElement("DIV");
a.setAttribute("id", this.id + "autocomplete-list");
a.setAttribute("class", "autocomplete-items");
/*append the DIV element as a child of the autocomplete container:*/
this.parentNode.appendChild(a);
/*for each item in the array...*/
for (i = 0; i < arr.length; i++) {
/*check if the item starts with the same letters as the text field value:*/
if (arr[i].substr(0, val.length).toUpperCase() == val.toUpperCase()) {
/*create a DIV element for each matching element:*/
b = document.createElement("DIV");
/*make the matching letters bold:*/
b.innerHTML = "<strong>" + arr[i].substr(0, val.length) + "</strong>";
b.innerHTML += arr[i].substr(val.length);
/*insert a input field that will hold the current array item's value:*/
b.innerHTML += "<input type='hidden' value='" + arr[i] + "'>";
/*execute a function when someone clicks on the item value (DIV element):*/
b.addEventListener("click", function(e) {
/*insert the value for the autocomplete text field:*/
inp.value = this.getElementsByTagName("input")[0].value;
/*close the list of autocompleted values,
(or any other open lists of autocompleted values:*/
closeAllLists();
});
a.appendChild(b);
}
}
});
/*execute a function presses a key on the keyboard:*/
inp.addEventListener("keydown", function(e) {
var x = document.getElementById(this.id + "autocomplete-list");
if (x) x = x.getElementsByTagName("div");
if (e.keyCode == 40) {
/*If the arrow DOWN key is pressed,
increase the currentFocus variable:*/
currentFocus++;
/*and and make the current item more visible:*/
addActive(x);
} else if (e.keyCode == 38) { //up
/*If the arrow UP key is pressed,
decrease the currentFocus variable:*/
currentFocus--;
/*and and make the current item more visible:*/
addActive(x);
} else if (e.keyCode == 13) {
/*If the ENTER key is pressed, prevent the form from being submitted,*/
e.preventDefault();
if (currentFocus > -1) {
/*and simulate a click on the "active" item:*/
if (x) x[currentFocus].click();
}
}
});
function addActive(x) {
/*a function to classify an item as "active":*/
if (!x) return false;
/*start by removing the "active" class on all items:*/
removeActive(x);
if (currentFocus >= x.length) currentFocus = 0;
if (currentFocus < 0) currentFocus = (x.length - 1);
/*add class "autocomplete-active":*/
x[currentFocus].classList.add("autocomplete-active");
}
function removeActive(x) {
/*a function to remove the "active" class from all autocomplete items:*/
for (var i = 0; i < x.length; i++) {
x[i].classList.remove("autocomplete-active");
}
}
function closeAllLists(elmnt) {
/*close all autocomplete lists in the document,
except the one passed as an argument:*/
var x = document.getElementsByClassName("autocomplete-items");
for (var i = 0; i < x.length; i++) {
if (elmnt != x[i] && elmnt != inp) {
x[i].parentNode.removeChild(x[i]);
}
}
}
/*execute a function when someone clicks in the document:*/
document.addEventListener("click", function (e) {
closeAllLists(e.target);
});
}
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
/* Find JSON.parse twice because your JSON data is also stringified. */
var myArr = JSON.parse(JSON.parse(this.responseText));
const carModelsArr = myArr.map((d) => d.fields.car_model_new)
autocomplete(document.getElementById("myInput"), carModelsArr)
}
};
xmlhttp.open("GET", "http://127.0.0.1:8000/test", true);
xmlhttp.send();
* {
box-sizing: border-box;
}
body {
font: 16px Arial;
}
.autocomplete {
/*the container must be positioned relative:*/
position: relative;
display: inline-block;
}
input {
border: 1px solid transparent;
background-color: #f1f1f1;
padding: 10px;
font-size: 16px;
}
input[type=text] {
background-color: #f1f1f1;
width: 100%;
}
input[type=submit] {
background-color: DodgerBlue;
color: #fff;
}
.autocomplete-items {
position: absolute;
border: 1px solid #d4d4d4;
border-bottom: none;
border-top: none;
z-index: 99;
/*position the autocomplete items to be the same width as the container:*/
top: 100%;
left: 0;
right: 0;
}
.autocomplete-items div {
padding: 10px;
cursor: pointer;
background-color: #fff;
border-bottom: 1px solid #d4d4d4;
}
.autocomplete-items div:hover {
/*when hovering an item:*/
background-color: #e9e9e9;
}
.autocomplete-active {
/*when navigating through the items using the arrow keys:*/
background-color: DodgerBlue !important;
color: #ffffff;
}
<!--Make sure the form has the autocomplete function switched off:-->
<form autocomplete="off" action="/action_page.php">
<div class="autocomplete" style="width:300px;">
<input id="myInput" type="text" name="myCountry" placeholder="Country">
</div>
<input type="submit">
</form>
关于javascript - 如何在 w3 自动完成 https ://www. w3schools.com/howto/howto_js_autocomplete.asp 给出的代码中提供 json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60370898/
注意:这不是 Translating PHP date() for Multilingual Site 的副本.我读过了! 对不起,我必须先解释一下我的框架是如何工作的,这样你才能准确地理解我的问题出
我在 PHP 5.2 中使用 Console_Getopt,发现它与其他语言(perl、bash、java)中的 getopt 有多么不同令人惊讶。谁能推荐如何从返回的数组“$opts”中解析参数?
我喜欢制作一个.htaccess文件来重定向从网站上收到的任何错误。 我已删除旧站点中的所有页面。但是我不知道人们在书中写了几页。 新的网页和网站的结构完全不同...因此,没有页面与旧的页面相同,更不
我需要实现一个由外部系统返回的 session 池,这样我就可以在需要时快速重用它们(创建 session 需要一段时间)。我使用数据源创建了一个数据库连接池(来自 Apache 的 DBCP),它是
我刚开始使用 C++,我无法理解我的代码是如何工作的: 好的,我分配内存,但在分配时没有人知道要分配的内存大小。但代码仍然有效。分配了多少内存?编译器如何知道我需要多少内存? 编辑: 抱歉,如果我的问
我正在编写一个存储一些数据的 Python 应用程序。为了存储数据,我编写了一个带有抽象方法的连接类(使用 Python 的 abc 模块)。此类是所有存储后端派生自的父类(super class)。
我想编写一个名为 size() 的函数,它将接受文件名或文件名列表,并分别返回文件的大小或文件大小的总和。如何在没有 python 中不可用的函数重载的情况下做到这一点? 谢谢 确定 最佳答案 def
我需要传送大量的 HTTP 内容(让我们说的很简单 - 具有 HTTP 访问权限的大存储 - 类似于 AWS S3)这需要的带宽超过一台服务器的带宽(我们每台服务器获得 200MBit,问题是不要改变
给定以下 UML 表示,我怎样才能获得 BullDog 的实例,它只公开了 getter 方法? BullDog 的实例不应有任何可用的 setter 方法。 BullDog 的实例应该只有 gett
我想配置 gitolite 以便 开发者无法推送到 master 和 stage1 开发人员可以对所有其他分支(他们想要的任何名称)进行 RW 操作 我想到的最好的事情是: repo foo bar
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: In Java, what is the best way to determine the size of an
基于最小的 C 解析器示例,并使用以下依赖项: compile(group: "org.codehaus.sonar.sslr", name: "sslr", version: "1.20"); co
我在有条件地创建依赖项方面遇到困难。谷歌搜索,我还没有找到使用BuildStack和条件谓词的好例子。 这是我在注册表中执行的操作: //snip public SomeRegistry() {
下面是部分html代码 我尝试使用 jquery 克隆 #test1 节点并删除添加按钮,然后将结果添加到 #container 我尝试编写如下代码,但似乎不起作用 $("#test1").clo
这个问题在这里已经有了答案: How to loop through a plain JavaScript object with the objects as members (28 个答案) 关
你好 不要说这是一个重复的问题,因为我已经阅读了两天。他们中没有一个真正提供有用的答案。 我在 SD 卡上的一个文件夹中有许多不同的文件。想要根据 apk、txt、mp3、avi、jpg 打开正确的应
在父行上设置空值时如何删除子行(在删除级联上?)? 这是数据库设计。 表 A [id、b_id_1、b_id_2] 表B[id,其他字段...] b_id_1 和 b_id_2 可以为 NULL 如果
我下载了 Open ERP 服务器和网络,决定不使用更厚的 gtk。我在 eclipse 中添加了 2 作为项目,pydev 在 Ubuntu 11.10 上运行,然后启动。我完成了 Web 客户端设
我需要将一些图形元素放在一个 div 中,这些元素应该在具有不同分辨率的各种屏幕(例如,移动屏幕)上显示。例如,类似于关闭覆盖窗口的“X”按钮。我可能会想到几个实现它的选项: 有几个 JPEG(每个分
这看起来应该是直截了当的,但我很难过。我有一个指向 View Controller 的链接,该 View Controller 最终使用 send_data 将文件下载到用户的硬盘驱动器。这非常有效,
我是一名优秀的程序员,十分优秀!