javascript - element.onchange 不适用于元素列表
问题描述
所以我有一个名为“Form”和“Question”的二类。“表格”包含一系列问题。当我在数组中添加一个问题时,我会在每个问题中调用一个名为 render() 的方法
render() {
let htmlElement = document.getElementById("formBody");
let id = Question.GenerateID();
htmlElement.innerHTML += `
<div class="p-2">
<input type="text" class="input-transparent w-100" id="${id}.t" value="${this.Title}" placeholder="Unnamed question">
</div>`;
/**
* @param {int} id
*/
let questionNameChange = function(id) {
this.Title = document.getElementById(id + ".t").value;
};
document.getElementById(id + ".t").onchange = questionNameChange.bind(this, id);
}
表格图片
问题是 element.onchange,它允许我更改问题的标题。
当我通过输入文本更改任何问题的标题时,它仅适用于已呈现的最后一个问题。
我做错什么了吗?
解决方案
也许你必须延迟绑定 onchange 直到元素被插入到 dom 中。换句话说,将它包装在一个 setTimeout 中:
setTimeout(function() {
document.getElementById(id + ".t").onchange = questionNameChange.bind(this, id);
})
查看这个工作示例:
let Question = {GenerateID: () => Math.floor(Math.random() * 100)}
class MyClass {
constructor(){
this.Title = 'my title'
}
questionNameChange(id) {
this.Title = document.getElementById(id + ".t").value;
document.getElementById(`${id}-label`).innerHTML = this.Title
}
render() {
let htmlElement = document.getElementById("formBody");
let id = Question.GenerateID();
htmlElement.innerHTML += `
<div class="p-2">
<input type="text" class="input-transparent w-100" id="${id}.t" value="${this.Title}" placeholder="Unnamed question">
<label id="${id}-label"></label>
</div>`;
setTimeout(() => {
document.getElementById(id + ".t").onchange = () => {
this.questionNameChange(id)
}
})
}
}
$(() => {
let myClass = new MyClass()
myClass.render()
myClass.render()
myClass.render()
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="formBody">
</form>
推荐阅读
- php - 如何在 ajax jQuery 中传递我的 php session_id()
- c++ - 当两个成员都在同一个类中时,出现错误“非静态成员引用必须相对于特定对象”
- sql - 前一个月的动态 12 个月滚动总计,可追溯到 12 个月
- unix - 用 sed 动态替换两个字符
- laravel - Laravel 多对多关系查询集合
- powershell - 如何使用powershell在excel文件中删除工作表?
- php - MySQL将数据透视到年月
- spring-boot - 当邮件服务器未连接时,Jhipster Health Endpoint 失败
- javascript - 不能调用两个方法 onSubmit 反应
- c# - 合并后SVN将文件重命名为大写