jquery - jQuery命令放置在选择元素之后时无法创建表
问题描述
我是 jQuery 的新手,并构建了我修改的代码以使其在小提琴等中立即工作。
When the select changes, it is supposed to create a table but it does not do anything. 但是,如果我将<div id="myTableId">
元素放在选择的顶部,<select id="mySelect" />
它就可以工作。知道为什么吗?
var service_data = [{
"role": "paul",
"display_name": "Paul",
"content": [{
"name": "AAA",
"link": "alink"
}, {
"name": "BBB",
"link": "blink"
}]
}, {
"role": "sally",
"display_name": "Sally",
"content": [{
"name": "CCC",
"link": "clink"
}]
}];
$(document).ready(function() {
//replaced service with dummy service
$.get("https://jsonplaceholder.typicode.com/todos", function(data, status) {
var _select = $('#mySelect');
$.each(service_data, function(val, text) {
_select.append(
`<option value="${val}">${text.display_name}</option>`
);
});
});
$("#mySelect").change(function() {
let selected_index = $("#mySelect")[0].selectedIndex;
var container = $('#myTableId');
var table = $('<table>');
$.each(service_data[selected_index].content, function(val, blob) {
var tr = $('<tr>');
tr.append('<td>' + blob.name + '</td>');
tr.append('<td>' + blob.link + '</td>');
table.append(tr);
});
container.append(table);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="mySelect" />
<br>
<div id="myTableId" />
解决方案
Divs 和 selects 不是自闭合元素。就 jQuery 而言,它们可能不存在,除非浏览器尝试为您关闭它们。修复它,它可以工作。
var service_data = [{
"role": "paul",
"display_name": "Paul",
"content": [{
"name": "AAA",
"link": "alink"
}, {
"name": "BBB",
"link": "blink"
}]
}, {
"role": "sally",
"display_name": "Sally",
"content": [{
"name": "CCC",
"link": "clink"
}]
}];
$(document).ready(function() {
//replaced service with dummy service
$.get("https://jsonplaceholder.typicode.com/todos", function(data, status) {
var _select = $('#mySelect');
$.each(service_data, function(val, text) {
_select.append(
`<option value="${val}">${text.display_name}</option>`
);
});
});
$("#mySelect").change(function() {
let selected_index = $("#mySelect")[0].selectedIndex;
var container = $('#myTableId');
var table = $('<table>');
$.each(service_data[selected_index].content, function(val, blob) {
var tr = $('<tr>');
tr.append('<td>' + blob.name + '</td>');
tr.append('<td>' + blob.link + '</td>');
table.append(tr);
});
container.append(table);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="mySelect"></select>
<br>
<div id="myTableId"></div>
推荐阅读
- reactjs - Props 传递和获取 NaN
- typescript - 异步函数返回类型强制 Promise< T | undefined> 而不是 Promise
- vba - 有没有办法确定用户是否使用 PowerPoint VBA 选择了形状或表格?
- python-3.x - ctx.voice_client.pause() 导致机器人离开语音通话而不是暂停音频
- javascript - 如何自动打开和下载网页?
- python-3.x - 如何通过 task_id 访问 Celery 链结果?
- java - 上传文件(Mac OS 到 USS)可能会损坏 I
- java - 如何使用 Gson 将 JSON 映射转换为自定义 Java 列表?
- php - 将一系列模型关系链接到查询构建器
- javascript - 将数据从服务器发送到客户端(节点 JS + webpack