Javascript 元素函数appendchild为空错误

Javascript 元素函数appendchild为空错误,javascript,forms,function,rendering,Javascript,Forms,Function,Rendering,我目前正在尝试创建一个函数,该函数创建的表单有一个提交按钮,默认情况下,在从另一个按钮触发之前是隐藏的。“我的”按钮当前会按我的意愿弹出表单,但在表单中“我的添加”按钮不存在,而且我也无法实际添加到表单中,因为它说appendChild为空。但是检查服务器和查询都表明找到了值。下面是我的错误代码片段,最后是我正在呈现的表单 getAndFormatNewReviewForm(event) { event.preventDefault(); const newRevie

我目前正在尝试创建一个函数,该函数创建的表单有一个提交按钮,默认情况下,在从另一个按钮触发之前是隐藏的。“我的”按钮当前会按我的意愿弹出表单,但在表单中“我的添加”按钮不存在,而且我也无法实际添加到表单中,因为它说appendChild为空。但是检查服务器和查询都表明找到了值。下面是我的错误代码片段,最后是我正在呈现的表单

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);
    })