元素函数 appendchild 为空错误

element function appendchild is null error

我目前正在尝试创建一个函数来创建一个表单,该表单有一个提交按钮,默认情况下是隐藏的,直到被另一个按钮触发。我的按钮当前按我的意愿弹出表单,但在表单中我的添加按钮不存在,我也无法实际添加到表单,因为它说 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() 方法)如果不为空,则更改

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

 getAndFormatNewReviewForm(event) {
       event.preventDefault();
       var newReviewForm = document.getElementById('new-review-form')   
       var submitButton = document.createElement("button") 
       submitButton.innerHTML = "Add"
       submitButton.id = "review-submit"
       submitButton.type = "submit"
       var 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 是 "buttons",el 将是您附加 getAndFormatNewReviewForm 的任何内容。将 "click" 更改为您想要的任何事件。

请注意,这是一个简单的磁带解决方案,您还需要设计脚本以在必要时终止。