Есть код на JS:
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";
}
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
var modal1 = document.getElementById('myModal1');
var btn1 = document.getElementById("myBtn1");
var span1 = document.getElementsByClassName("close1")[0];
btn1.onclick = function() {
modal1.style.display = "block";
}
span1.onclick = function() {
modal1.style.display = "none";
}
window.onclick = function(event) {
if (event.target == modal1) {
modal1.style.display = "none";
}
}
Проблема в последней части кода:
window.onclick = function(event) {
if (event.target == modal1) {
modal1.style.display = "none";
}
}
Если его оставлять, то первое модальное окно можно закрыть только при нажатии на крестик. Если убрать, то наоборот. 1 модальное окно закрывается при клике в любую область, а 2 окно только при нажатии на крестик.
Подскажите, пожалуйста, где ошибка? Нужно, что бы они работали одинаково. И 1 и 2 окна закрывались и по нажатию на крестик и по нажатию в любую другую область (кроме нажатия на само окно).
HTML 1 окна:
<button id="myBtn">Открыть окно</button>
<div id="myModal" class="modal">
<div class="modal-content">
<div class="modal-header">
<span class="close">×</span>
<h2>Шапка модального окна</h2>
</div>
<div class="modal-body">
<p>Какой-то текст в теле модального окна</p>
<p>Ещё другой текст...</p>
</div>
<div class="modal-footer">
<h3>Футер модального окна</h3>
</div>
</div>
</div>
2 окно:
<button id="myBtn1">Открыть окно</button>
<div id="myModal1" class="modal1">
<div class="modal1-content">
<div class="modal1-header">
<span class="close1">×</span>
<h2>модального окна</h2>
</div>
<div class="modal1-body">
<p>Какой-то текст в теле модального окна</p>
<p>Ещё другой текст...</p>
</div>
<div class="modal1-footer">
<h3>Футер модального окна</h3>
</div>
</div>
</div>
css:
body {font-family: Arial, Helvetica, sans-serif;}
#myBtn {
background-color: #9C27B0;
color: white;
padding: 12px 16px;
font-size: 18px;
font-weight: bold;
border: none;
cursor: pointer;
width: 180px;
}
.modal {
display: none; /* Hidden by default */
position: fixed; /* Stay in place */
z-index: 1; /* Sit on top */
padding-top: 100px; /* Location of the box */
left: 0;
top: 0;
width: 100%; /* Full width */
height: 100%; /* Full height */
overflow: auto; /* Enable scroll if needed */
background-color: rgb(0,0,0); /* Fallback color */
background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
}
.modal-content {
position: relative;
background-color: #E1BEE7;
margin: auto;
padding: 0;
border: 5px solid #7B1FA2;
width: 50%;
box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);
-webkit-animation-name: animatetop;
-webkit-animation-duration: 0.4s;
animation-name: animatetop;
animation-duration: 0.4s
}
@-webkit-keyframes animatetop {
from {top:-300px; opacity:0}
to {top:0; opacity:1}
}
@keyframes animatetop {
from {top:-300px; opacity:0}
to {top:0; opacity:1}
}
.close {
color: white;
float: right;
font-size: 28px;
font-weight: bold;
}
.close:hover,
.close:focus {
color: #000;
text-decoration: none;
cursor: pointer;
}
.modal-header {
padding: 2px 16px;
background-color: #9C27B0;
color: white;
}
.modal-body {padding: 2px 16px;}
.modal-footer {
padding: 2px 16px;
background-color: #9C27B0;
color: white;
}
#myBtn1 {
background-color: #9C27B0;
color: white;
padding: 12px 16px;
font-size: 18px;
font-weight: bold;
border: none;
cursor: pointer;
width: 180px;
}
.modal1 {
display: none; /* Hidden by default */
position: fixed; /* Stay in place */
z-index: 1; /* Sit on top */
padding-top: 100px; /* Location of the box */
left: 0;
top: 0;
width: 100%; /* Full width */
height: 100%; /* Full height */
overflow: auto; /* Enable scroll if needed */
background-color: rgb(0,0,0); /* Fallback color */
background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
}
.modal1-content {
position: relative;
background-color: #E1BEE7;
margin: auto;
padding: 0;
border: 5px solid #7B1FA2;
width: 50%;
box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);
-webkit-animation-name: animatetop;
-webkit-animation-duration: 0.4s;
animation-name: animatetop;
animation-duration: 0.4s
}
@-webkit-keyframes animatetop {
from {top:-300px; opacity:0}
to {top:0; opacity:1}
}
@keyframes animatetop {
from {top:-300px; opacity:0}
to {top:0; opacity:1}
}
.close1 {
color: white;
float: right;
font-size: 28px;
font-weight: bold;
}
.close1:hover,
.close1:focus {
color: #000;
text-decoration: none;
cursor: pointer;
}
.modal1-header {
padding: 2px 16px;
background-color: #9C27B0;
color: white;
}
.modal1-body {padding: 2px 16px;}
.modal1-footer {
padding: 2px 16px;
background-color: #9C27B0;
color: white;
}
Вот так вот будет работать правильно. Пример на jsfiddle тут - https://jsfiddle.net/crus/bqfmdcrp/9/
Вы 2 раза подряд вызывали window.onclick, и выполнялся только один.
window.onclick = function(e) {
if (e.target == modal) {
modal.style.display = "none";
console.log('done');
} else if (e.target == modal1) {
modal1.style.display = "none";
console.log('done');
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Нужна функция function getAjax(url,params), которая принимала бы аргументы: url(url get-запроса), массив данных params и возвращала бы массив или объект или строку...
Для div:hover я задаю width: 25%, но когда курсор стоит за пределами div'a начинается морганиеКак это иcправить?