Javascript “模态”;“关闭”-按钮关闭一次后消失

Javascript “模态”;“关闭”-按钮关闭一次后消失,javascript,Javascript,我在rails工作。其思想是,当用户没有填写表单中的所有字段时,会出现模式窗口,指出错误。当我第一次犯这些错误时,窗口显示如我所愿,下面有“关闭”按钮 所以,我点击它,模态消失了。一切都好。然后我再次单击“注册”按钮,仍然有空字段,这就是正在发生的事情 如您所见,“关闭”按钮未显示。如果我刷新页面并再次单击“注册”,则“关闭”-按钮再次出现。我对JavaScript非常陌生,我不知道发生了什么。这是我的两个文件中的代码。new.js: document.addEventListener("D

我在rails工作。其思想是,当用户没有填写表单中的所有字段时,会出现模式窗口,指出错误。当我第一次犯这些错误时,窗口显示如我所愿,下面有“关闭”按钮

所以,我点击它,模态消失了。一切都好。然后我再次单击“注册”按钮,仍然有空字段,这就是正在发生的事情

如您所见,“关闭”按钮未显示。如果我刷新页面并再次单击“注册”,则“关闭”-按钮再次出现。我对JavaScript非常陌生,我不知道发生了什么。这是我的两个文件中的代码。new.js:

document.addEventListener("DOMContentLoaded", function() {
   var modal = document.getElementById("myModal");
   if (!modal) return;

   var close = modal.querySelector(".dismiss-close");
   var modalBody = modal.querySelector(".modal-body");
   var modalContent = modal.querySelector(".modal-content");

   function closeModal() {
     modal.style.display = "none";
     modalBody.innerHTML = "";
   }

   modalContent.addEventListener("click", function(event) {
       event.stopPropagation();
   });

   close.addEventListener("click", closeModal);
   modal.addEventListener("click", closeModal);
}); 
和失败的_modal.js.erb:

var errors = <%= error_messages.to_json.html_safe %>;

var errorForm = document.querySelector('#myModal');
var modalBody = errorForm.querySelector('.modal-body');
var alertElement = document.createElement('div');

alertElement.classList.add('alert');
alertElement.classList.add('alert-danger');
modalBody.appendChild(alertElement);
var errList = document.createElement('ul');
alertElement.appendChild(errList)

errors.forEach(function(error) {
   var errElement = document.createElement('li');
   errElement.innerText = error;
   errList.appendChild(errElement)
})

errorForm.style.display = "block"; 
var错误=;
var errorForm=document.querySelector('#myModal');
var modalBody=errorForm.querySelector('.modalBody');
var alertElement=document.createElement('div');
alertElement.classList.add('alert');
alertElement.classList.add('alert-danger');
modalBody.appendChild(alertElement);
var errList=document.createElement('ul');
alertElement.appendChild(错误列表)
errors.forEach(函数(错误){
var errElement=document.createElement('li');
errElement.innerText=错误;
errList.appendChild(errElement)
})
errorForm.style.display=“block”;
那么,我如何通过点击“注册”按钮,点击掉窗口并让它恢复到以前的状态呢?我应该以某种方式使用“切换”方法吗?谢谢

将id添加到警报div

在var alertElement=document.createElement('div')之后

alertElement.id=“alertElement”

而不是

modalBody.innerHTML=“”

你可以用

modalBody.removeChild(modalBody.querySelector(“#alertElement”)

它只删除充满错误的div并保留按钮。

将id添加到警报div

在var alertElement=document.createElement('div')之后

alertElement.id=“alertElement”

而不是

modalBody.innerHTML=“”

你可以用

modalBody.removeChild(modalBody.querySelector(“#alertElement”)


它只删除充满错误的div并保留按钮。

您正在使用
modalBody.innerHTML=“”)清除模式中的所有内容。当你按下“注册”按钮时,你在用什么填充它?我看不到那个功能哦,我应该用什么填充它?这对我来说就像火箭科学。嗯,错误仍然存在。只有按钮没有。嗯,它应该填充与初始填充相同的内容。或者您可以尝试不清空HTML,因此尝试删除
modalBody.innerHTML=“”
这会保留按钮,但也会复制所有错误,因此首先我会得到4个错误,然后是8个,然后是12个等等。我怎么能只保留按钮而不复制错误列表?我想你需要在模态体中为内容添加一个元素(我假设模态内容就是这样,但除了从中删除单击事件外,它似乎不会被使用)。您用内容填充该元素,然后仅在为新模态重置该元素时清空该元素。您使用
modalBody.innerHTML=“”清除模态中的所有内容
。当你按下“注册”按钮时,你要用什么来填充它?我看不到功能哦,我应该用什么来填充它?这对我来说就像火箭科学一样。嗯,错误仍然存在。只有按钮不正确。嗯,它应该填充与初始填充相同的内容。或者你可以尝试不清空HTML,所以尝试一下删除
modalBody.innerHTML=“”;
这会保留按钮,但也会复制所有错误,因此首先我会得到4个错误,然后是8个,然后是12个等等。我怎么能只保留按钮而不复制错误列表?我想你需要在模态体中为内容添加一个元素(我假设模态内容就是这样,但除了从中删除单击事件外,它似乎不会被使用)。您使用内容填充该元素,然后仅在为新模态重置该元素时清空该元素。