2017-04-18 63 views
0

我试图创建一个新的和独特的模态每次我点击其中一个div。问题是,当我点击divs时,新的模式被创建,但不会像它应该打开。创建点击模式

如果点击其中一个div之前点击该按钮,默认模式将正常打开。

HTML

<div class="destaque1">Gráfico 1</div> 
<div class="destaque2">Gráfico 2</div> 
<div class="destaque3">Gráfico 3</div> 
<div class="destaque4">Gráfico 4</div> 

<button id="myBtn">Open Modal</button> 

<div id="myModal" class="modal"> 
    <div class="modal-content"> 
     <span class="close">&times;</span> 
     <p>Some text in the Modal..</p> 
    </div> 
</div> 

CSS

.modal { 
    display: none; 
    position: fixed; 
    z-index: 1; 
    padding-top: 100px; 
    left: 0; 
    top: 0; 
    width: 100%; 
    height: 100%; 
    overflow: auto; 
    background-color: rgb(0,0,0); 
    background-color: rgba(0,0,0,0.4); 
} 

.modal-content { 
    background-color: #fefefe; 
    margin: auto; 
    padding: 20px; 
    border: 1px solid #888; 
    width: 80%; 
} 

.close { 
    color: #aaaaaa; 
    float: right; 
    font-size: 28px; 
    font-weight: bold; 
} 

.close:hover, 
.close:focus { 
    color: #000; 
    text-decoration: none; 
    cursor: pointer; 
} 

SCRIPT

var modal = document.getElementById('myModal'); 

var btn = document.getElementById("myBtn"); 

var span = document.getElementsByClassName("close")[0]; 

btn.onclick = function() { 
    modal.style.display = "block"; 
} 

span.onclick = function() { 
    modal.style.display = "none"; 
    $('#myModal').remove(); 
    $('.modal-content').remove(); 
    $('.close').remove(); 
} 

window.onclick = function(event) { 
    if (event.target == modal) { 
     modal.style.display = "none"; 
     $('#myModal').remove(); 
     $('.modal-content').remove(); 
     $('.close').remove(); 
    } 
} 

$('.destaque1').click(function(){ 

    $('#myModal').remove(); 
    $('.modal-content').remove(); 
    $('.close').remove(); 

    var divModal = document.createElement('div'); 
    divModal.id = "myModal"; 
    divModal.className = "modal"; 

    var divModalContent = document.createElement('div'); 
    divModalContent.className = "modal-content"; 

    var spanClose = document.createElement('span'); 
    spanClose.className = "close"; 

    var t = document.createTextNode("times;"); 
    spanClose.appendChild(t); 

    document.body.appendChild(divModal); 
    divModal.appendChild(divModalContent); 
    divModalContent.appendChild(spanClose); 

    modal.style.display = "block"; 
    modal.style.backgroundColor = "red"; 

}); 

$('.destaque2').click(function(){ 

    $('#myModal').remove(); 
    $('.modal-content').remove(); 
    $('.close').remove(); 

    var divModal = document.createElement('div'); 
    divModal.id = "myModal"; 
    divModal.className = "modal"; 

    var divModalContent = document.createElement('div'); 
    divModalContent.className = "modal-content"; 

    var spanClose = document.createElement('span'); 
    spanClose.className = "close"; 

    var t = document.createTextNode("times;"); 
    spanClose.appendChild(t); 

    document.body.appendChild(divModal); 
    divModal.appendChild(divModalContent); 
    divModalContent.appendChild(spanClose); 

    modal.style.display = "block"; 
    modal.style.backgroundColor = "blue"; 

}); 

$('.destaque3').click(function(){ 

    $('#myModal').remove(); 
    $('.modal-content').remove(); 
    $('.close').remove(); 

    var divModal = document.createElement('div'); 
    divModal.id = "myModal"; 
    divModal.className = "modal"; 

    var divModalContent = document.createElement('div'); 
    divModalContent.className = "modal-content"; 

    var spanClose = document.createElement('span'); 
    spanClose.className = "close"; 

    var t = document.createTextNode("times;"); 
    spanClose.appendChild(t); 

    document.body.appendChild(divModal); 
    divModal.appendChild(divModalContent); 
    divModalContent.appendChild(spanClose); 

    modal.style.display = "block"; 
    modal.style.backgroundColor = "green"; 

}); 

$('.destaque4').click(function(){ 

    $('#myModal').remove(); 
    $('.modal-content').remove(); 
    $('.close').remove(); 

    var divModal = document.createElement('div'); 
    divModal.id = "myModal"; 
    divModal.className = "modal"; 

    var divModalContent = document.createElement('div'); 
    divModalContent.className = "modal-content"; 

    var spanClose = document.createElement('span'); 
    spanClose.className = "close"; 

    var t = document.createTextNode("times;"); 
    spanClose.appendChild(t); 

    document.body.appendChild(divModal); 
    divModal.appendChild(divModalContent); 
    divModalContent.appendChild(spanClose); 

    modal.style.display = "block"; 
    modal.style.backgroundColor = "yellow"; 

}); 

回答

0

当您删除#myModal从DOM树中创建并使用该ID创建一个新元素,则modal不会更新,因此仍然指向已删除的元素。

我建议你调整你的代码如下:

  • 您将一切与变量modalspan到一个单独的函数交易(我称之为initModal)。
  • 您制作initModal显示模式(即设置modal.style.display = 'block')。
  • 您使initModal返回modal,以便在初始化后可以轻松地应用背景颜色等自定义设置。
  • 您设置了btn.onclick = initModal

所有这些应用,您可以:

var btn = document.getElementById("myBtn"); 
 

 
btn.onclick = initModal; 
 

 
function initModal() 
 
{ 
 
\t var modal = document.getElementById('myModal'); 
 
    var span = document.getElementsByClassName("close")[0]; 
 

 
    span.onclick = function() { 
 
     modal.style.display = "none"; 
 
     $('#myModal').remove(); 
 
     $('.modal-content').remove(); 
 
     $('.close').remove(); 
 
    } 
 
    
 
    window.onclick = function(event) { 
 
     if (event.target == modal) { 
 
      modal.style.display = "none"; 
 
      $('#myModal').remove(); 
 
      $('.modal-content').remove(); 
 
      $('.close').remove(); 
 
     } 
 
    } 
 
    
 
    modal.style.display = "block"; 
 
    return modal; 
 
} 
 

 
$('.destaque1').click(function(){ 
 

 
    $('#myModal').remove(); 
 
    $('.modal-content').remove(); 
 
    $('.close').remove(); 
 

 
    var divModal = document.createElement('div'); 
 
    divModal.id = "myModal"; 
 
    divModal.className = "modal"; 
 

 
    var divModalContent = document.createElement('div'); 
 
    divModalContent.className = "modal-content"; 
 

 
    var spanClose = document.createElement('span'); 
 
    spanClose.className = "close"; 
 

 
    var t = document.createTextNode("times;"); 
 
    spanClose.appendChild(t); 
 

 
    document.body.appendChild(divModal); 
 
    divModal.appendChild(divModalContent); 
 
    divModalContent.appendChild(spanClose); 
 

 
    initModal().style.backgroundColor = "red"; 
 
}); 
 

 
$('.destaque2').click(function(){ 
 

 
    $('#myModal').remove(); 
 
    $('.modal-content').remove(); 
 
    $('.close').remove(); 
 

 
    var divModal = document.createElement('div'); 
 
    divModal.id = "myModal"; 
 
    divModal.className = "modal"; 
 

 
    var divModalContent = document.createElement('div'); 
 
    divModalContent.className = "modal-content"; 
 

 
    var spanClose = document.createElement('span'); 
 
    spanClose.className = "close"; 
 

 
    var t = document.createTextNode("times;"); 
 
    spanClose.appendChild(t); 
 

 
    document.body.appendChild(divModal); 
 
    divModal.appendChild(divModalContent); 
 
    divModalContent.appendChild(spanClose); 
 

 
    initModal().style.backgroundColor = "blue"; 
 
}); 
 

 
$('.destaque3').click(function(){ 
 

 
    $('#myModal').remove(); 
 
    $('.modal-content').remove(); 
 
    $('.close').remove(); 
 

 
    var divModal = document.createElement('div'); 
 
    divModal.id = "myModal"; 
 
    divModal.className = "modal"; 
 

 
    var divModalContent = document.createElement('div'); 
 
    divModalContent.className = "modal-content"; 
 

 
    var spanClose = document.createElement('span'); 
 
    spanClose.className = "close"; 
 

 
    var t = document.createTextNode("times;"); 
 
    spanClose.appendChild(t); 
 

 
    document.body.appendChild(divModal); 
 
    divModal.appendChild(divModalContent); 
 
    divModalContent.appendChild(spanClose); 
 

 
    initModal().style.backgroundColor = "green"; 
 
}); 
 

 
$('.destaque4').click(function(){ 
 

 
    $('#myModal').remove(); 
 
    $('.modal-content').remove(); 
 
    $('.close').remove(); 
 

 
    var divModal = document.createElement('div'); 
 
    divModal.id = "myModal"; 
 
    divModal.className = "modal"; 
 

 
    var divModalContent = document.createElement('div'); 
 
    divModalContent.className = "modal-content"; 
 

 
    var spanClose = document.createElement('span'); 
 
    spanClose.className = "close"; 
 

 
    var t = document.createTextNode("times;"); 
 
    spanClose.appendChild(t); 
 

 
    document.body.appendChild(divModal); 
 
    divModal.appendChild(divModalContent); 
 
    divModalContent.appendChild(spanClose); 
 

 
    initModal().style.backgroundColor = "yellow"; 
 
});
.modal { 
 
    display: none; 
 
    position: fixed; 
 
    z-index: 1; 
 
    padding-top: 100px; 
 
    left: 0; 
 
    top: 0; 
 
    width: 100%; 
 
    height: 100%; 
 
    overflow: auto; 
 
    background-color: rgb(0,0,0); 
 
    background-color: rgba(0,0,0,0.4); 
 
} 
 

 
.modal-content { 
 
    background-color: #fefefe; 
 
    margin: auto; 
 
    padding: 20px; 
 
    border: 1px solid #888; 
 
    width: 80%; 
 
} 
 

 
.close { 
 
    color: #aaaaaa; 
 
    float: right; 
 
    font-size: 28px; 
 
    font-weight: bold; 
 
} 
 

 
.close:hover, 
 
.close:focus { 
 
    color: #000; 
 
    text-decoration: none; 
 
    cursor: pointer; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="destaque1">Gráfico 1</div> 
 
<div class="destaque2">Gráfico 2</div> 
 
<div class="destaque3">Gráfico 3</div> 
 
<div class="destaque4">Gráfico 4</div> 
 

 
<button id="myBtn">Open Modal</button> 
 

 
<div id="myModal" class="modal"> 
 
    <div class="modal-content"> 
 
     <span class="close">&times;</span> 
 
     <p>Some text in the Modal..</p> 
 
    </div> 
 
</div>