javascript - 下拉选择后自动填充输入框
问题描述
我有一些 javascript 应该根据下拉列表中的选择填充输入字段。它在后台使用 json 文件来查找值。JSON 看起来像这样:
"name":"Netherlands",
"alpha3":"NLD",
与 json 的连接有效,所有值(在本例中为国家/地区)都在下拉列表中可见。但是当我在下拉列表中选择一个值时,输入字段应该自动填充 json 中的 alpha3 值。
这不正常,输入字段始终填充 JSON 文件中的最后一个 alpha3 值(称为 ZZZ),而不是与所选选项对应的值。
我究竟做错了什么?
let dropdown = document.getElementById('landen');
dropdown.length = 0;
let defaultOption = document.createElement('option');
defaultOption.text = 'Selecteer land';
dropdown.add(defaultOption);
dropdown.selectedIndex = 0;
const url = 'lib/jsondata/landenmetcodes.json';
const request = new XMLHttpRequest();
request.open('GET', url, true);
request.onload = function() {
if (request.status === 200) {
const data = JSON.parse(request.responseText);
let option;
for (let i = 0; i < data.length; i++) {
option = document.createElement('option');
option.text = data[i].name;
option.value = data[i].name;
dropdown.add(option);
tekst = data[i].alpha3;
document.getElementById("landen").addEventListener("change", myFunction);
function myFunction() {
var x = document.getElementById("landcode");
x.value = tekst;
}
}
} else {
// Reached the server, but it returned an error
}
}
request.onerror = function() {
console.error('An error occurred fetching the JSON from ' + url);
};
request.send();
解决方案
myFunction 是一个事件回调,仅在触发事件时触发。您正在尝试在事件回调中使用来自 ajax 回调的局部变量。到事件触发时,“tekst”不再可用。您可以将 json 保存在全局变量中,然后在事件回调中使用它
let dropdown = document.getElementById('landen');
dropdown.length = 0;
let jsOptions = {};
let defaultOption = document.createElement('option');
defaultOption.text = 'Selecteer land';
dropdown.add(defaultOption);
dropdown.selectedIndex = 0;
document.getElementById("landen").addEventListener("change", myFunction);
function myFunction(evt) {
const val = evt.target.value;
var x = document.getElementById("landcode");
x.value = jsOptions[val];
}
const url = 'lib/jsondata/landenmetcodes.json';
const request = new XMLHttpRequest();
request.open('GET', url, true);
request.onload = function() {
if (request.status === 200) {
const data = JSON.parse(request.responseText);
let option;
for (let i = 0; i < data.length; i++) {
option = document.createElement('option');
option.text = data[i].name;
option.value = data[i].name;
dropdown.add(option);
jsOptions[data[i].name] = data[i].alpha3;
}
} else {
// Reached the server, but it returned an error
}
}
request.onerror = function() {
console.error('An error occurred fetching the JSON from ' + url);
};
request.send();
推荐阅读
- angular - 如何在 Angular 中将 scss 与模块联合应用
- php - 如何从购物车 foreach 循环创建结帐表
- c# - 当我尝试从数据库创建模型时,为什么会出现此错误?
- python - .exe 没有通过 winrm 执行
- algorithm - 计算机如何计算对数?
- spring-cloud-loadbalancer - Spring Cloud Load Balancer - 通过 Java 自定义负载均衡器客户端配置
- javascript - 这是什么“�”以及如何删除它
- linux - 用于多核 cpu 的 Autodock Vina 脚本的多个实例
- pandas - 将一列数据框拆分为熊猫中的新列
- java - 具有更改活动的布局动画