Javascript addEventListener在函数内部不工作
我正在尝试根据这些设置生成表单Javascript addEventListener在函数内部不工作,javascript,dom,addeventlistener,Javascript,Dom,Addeventlistener,我正在尝试根据这些设置生成表单 let formItems = new Form("form-items", { items: [ { id: "companyName" }, { id: "documentKey" }, { id: "documentDate" } ], }); 在内部,我生成每个输入,并尝试添加一个eventListener,但它不起作用。我做错了什么 modu
let formItems = new Form("form-items", {
items: [
{ id: "companyName" },
{ id: "documentKey" },
{ id: "documentDate" }
],
});
在内部,我生成每个输入,并尝试添加一个eventListener
,但它不起作用。我做错了什么
module.exports = function Form(formElementId, options) {
this.state = {}
options.items.map(item => {
renderInput(item.id);
this.state[item.id] = ""
})
function renderInput(id) {
let html = `<input id="${id}" />`
document.getElementById(formElementId).innerHTML += html;
document.getElementById(id).addEventListener("input", (e) => {
console.log(e); // <--------- Doesn't work
this.state[id] = e.target.value; // <--------- Doesn't work
console.log(this.state); // <--------- Doesn't work
})
}
}
module.exports=函数形式(formElementId,选项){
this.state={}
options.items.map(item=>{
renderInput(项目id);
this.state[item.id]=“”
})
函数renderInput(id){
让html=``
document.getElementById(formElementId).innerHTML+=html;
document.getElementById(id).addEventListener(“输入”,(e)=>{
console.log(e);//您可以动态创建一个HTML输入元素并将事件附加到它,而不是使用刚刚附加到容器的+=
将HTML添加到
我将使用以下代码段:
module.exports = function Form(formElementId, options) {
this.state = {};
self = this;
options.items.map(item => {
renderInput(item.id);
this.state[item.id] = "";
});
function renderInput(id) {
let input = document.createElement("input");
input.setAttribute("id", id);
document.getElementById(formElementId).append(input);
input.addEventListener("input", e => {
self.state[id] = e.target.value;
});
}
};
您可以动态创建一个HTML输入元素并将事件附加到该元素,而不是使用添加到容器的+=
将HTML添加到模板文本中
我将使用以下代码段:
module.exports = function Form(formElementId, options) {
this.state = {};
self = this;
options.items.map(item => {
renderInput(item.id);
this.state[item.id] = "";
});
function renderInput(id) {
let input = document.createElement("input");
input.setAttribute("id", id);
document.getElementById(formElementId).append(input);
input.addEventListener("input", e => {
self.state[id] = e.target.value;
});
}
};
检查console
和document.getElementById(id)。长度
检查console
和document.getElementById(id).length
为什么与模板文本比较有效?另外,此.state
未定义?如何绑定它?我是否使用让self=this
然后使用self.state
?为什么与模板文本比较有效:这是因为JavaScript和HTML引擎尚未添加和识别div,因此变量approachh是包含HTML DOM元素的本机方法,而且,this.state是未定义的:很抱歉没有定义,但是是的,因为默认情况下箭头函数不绑定到this
,您可以像您所说的那样使用普通函数或使用self
变量。感谢您的解释。您可以编辑您的解决方案以包含this吗代码>修复,没有箭头函数?看起来如何?我更新了这个,以便使用箭头函数进行快速修复,稍后将检查其他选项。为什么这对模板文本有效?而且,这个.state
未定义?我如何绑定它?我是否使用让self=this
然后使用self.state
?为什么这对templa有效te literals:这是由于尚未添加div并被JavaScript和HTML引擎识别,因此变量方法是使用HTML DOM元素的本机方法,而且,this.state是未定义的:很抱歉没有定义,但是是的,因为默认情况下,箭头函数不绑定到this
,您可以使用普通函数或e> 如您所述的self
变量。感谢您的解释。您可以编辑您的解决方案,使其包含此
修复程序,而不包含箭头功能吗?外观如何?我更新了此解决方案以获得带箭头功能的快速修复程序,稍后将检查其他选项。