Javascript 元素函数appendchild为空错误
我目前正在尝试创建一个函数,该函数创建的表单有一个提交按钮,默认情况下,在从另一个按钮触发之前是隐藏的。“我的”按钮当前会按我的意愿弹出表单,但在表单中“我的添加”按钮不存在,而且我也无法实际添加到表单中,因为它说appendChild为空。但是检查服务器和查询都表明找到了值。下面是我的错误代码片段,最后是我正在呈现的表单Javascript 元素函数appendchild为空错误,javascript,forms,function,rendering,Javascript,Forms,Function,Rendering,我目前正在尝试创建一个函数,该函数创建的表单有一个提交按钮,默认情况下,在从另一个按钮触发之前是隐藏的。“我的”按钮当前会按我的意愿弹出表单,但在表单中“我的添加”按钮不存在,而且我也无法实际添加到表单中,因为它说appendChild为空。但是检查服务器和查询都表明找到了值。下面是我的错误代码片段,最后是我正在呈现的表单 getAndFormatNewReviewForm(event) { event.preventDefault(); const newRevie
getAndFormatNewReviewForm(event) {
event.preventDefault();
const newReviewForm = document.getElementById('new-review-form')
const submitButton = document.createElement("button")
submitButton.innerHTML = "Add"
submitButton.id = "review-submit"
submitButton.type = "submit"
const buttonDiv = document.getElementById("buttons")
buttonDiv.appendChild(submitButton)
submitButton.addEventListener('click', this.submitReviewInputs.bind(this))
}
首先,您必须从buttonDiv常量获取日志(console.log()方法),如果该常量不为null,请更改
getAndFormatNewReviewForm(event) {
event.preventDefault();
const newReviewForm = document.getElementById('new-review-form')
const submitButton = document.createElement("button")
submitButton.innerHTML = "Add"
submitButton.id = "review-submit"
submitButton.type = "submit"
const buttonDiv = document.getElementById("buttons")
buttonDiv.appendChild(submitButton)
submitButton.addEventListener('click', this.submitReviewInputs.bind(this))
}
到
我认为这会起作用我通常不建议这样做,但可能是异步脚本没有按预期顺序运行,或者脚本标记没有按预期顺序加载。无论哪种方式,都会在div元素可用之前调用您正在调用的函数。一种方法是在合理的时间范围内进行轮询,然后在元素可用时执行函数。例如:
function getButton(){
let poll = (res)=>{
let div = document.getElementById("buttons");
if (div) {
res(div);
} else {
window.requestAnimationFrame(function(){poll(res);});
}
};
return new Promise(function(res){poll(res);})
}
用你的
getButton()
.then(function(div){
el.addEvenlistener("click",getAndFormatNewReviewForm,false);
})
div
是“按钮”,el将是您附加到的getAndFormatNewReviewForm
中的任何内容。将“单击”更改为您想要的任何事件
请注意,这是一个duck磁带解决方案,您还需要设计脚本以在必要时终止 你确定你有一个带有
id=“buttons”
的HTML元素吗?所以你肯定了解了一些事情。我能够纠正这个问题。是HTML中一个简单的输入错误导致了按钮而不是按钮出现。是的,但我确实看到了这对将来使用有多大帮助。我也很欣赏这个解决方案。
getButton()
.then(function(div){
el.addEvenlistener("click",getAndFormatNewReviewForm,false);
})