#javascript #html
#javascript #HTML
Вопрос:
function getId(id) {
var modal = document.getElementById(id);
var span = document.getElementsByClassName("close")[0];
modal.style.display = "block";
span.onclick = function() {
modal.style.display = "none";
}
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
}
#main{ left: 0px;
position: relative;
float: left;}
#main p{ font-family: Verdana, Helvetica, Arial, sans-serif;
font-size: .8em;
text-align: justify;
line-height: 1.5em;
margin-top: 25px;}
.modal {
display: none; /* Hidden by default */
position: center;
z-index: 1; /* Sit on top */
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-header {
padding: 2px 16px;
background-color: #5cb85c;
color: white;
}
/* Modal Body */
.modal-body {padding: 2px 16px;}
/* Modal Footer */
.modal-footer {
padding: 2px 16px;
background-color: #5cb85c;
color: white;
}
/* Modal Content */
.modal-content {
position: relative;
background-color: #fefefe;
margin: auto;
padding: 0;
border: 1px solid #888;
width: 80%;
box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);
animation-name: animatetop;
animation-duration: 0.4s
}
/* Add Animation */
@keyframes animatetop {
from {top: -300px; opacity: 0}
to {top: 0; opacity: 1}
}
/* The Close Button */
.close {
color: #aaa;
float: right;
font-size: 28px;
font-weight: bold;
}
.close:hover,
.close:focus {
color: black;
text-decoration: none;
cursor: pointer;
}
<!-- main body of the HTML -->
<div id="main" >
<h1>Current Members</h1>
<center>
<table width="75%" border="0">
<th>Committee Members</th>
<tr height="50">
<td><a href="#" id="howie" onClick="getId(this.id "-modal")">Howie Jones (President)</a></td>
<td><a href="#" id="ferdi" onClick="getId(this.id)">Fernando Russo (V.P.)</a></td>
<td><a href="#" id="ste" onClick="getId(this.id)">Steve Dicksons (Secretary)</a></td>
<td><a href="#" id="kym" onClick="getId(this.id)">Kym Jones (Treasurer)</a></td>
</tr>
<th>Members</th>
<tr height="50">
<td><a href="#" id="john" onClick="getId(this.id)">John Ketley</a></td>
<td><a href="#" id="mike" onClick="getId(this.id)">Mike Lamb</a></td>
<td><a href="#" id="sol" onClick="getId(this.id)">Sol Dean</a></td>
</tr>
</table>
</center>
</div>
<!-- modal in the same HTML file -->
<div id="howie-modal" class="modal">
<div class="modal-content">
<div class="modal-header">
<span class="close">amp;times;</span>
<h2>Modal Header</h2>
</div>
<div class="modal-body">
<p>Some text in the Modal Body</p>
<p>Some other text...</p>
</div>
<div class="modal-footer">
<h3>Modal Footer</h3>
</div>
</div>
</div>
Я использую https://www.w3schools.com/howto/howto_css_modals.asp за основу добавления простого модального представления на мою HTML-страницу. Поскольку на моей главной странице есть несколько ссылок, я изменил JS следующим образом
function getId(id) {
var modal = document.getElementById(id);
var span = document.getElementsByClassName("close")[0];
modal.style.display = "block";
span.onclick = function() {
modal.style.display = "none";
}
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
}
с кодом вызывающего абонента, который выглядит следующим образом
<center>
<table width="75%" border="0">
<th>Committee Members</th>
<tr height="50">
<td><a href="#" id="howie" onClick="getId(this.id)">Howie Jones (President)</a></td>
<td><a href="#" id="ferdi" onClick="getId(this.id)">Fernando Russo (V.P.)</a></td>
<td><a href="#" id="ste" onClick="getId(this.id)">Steve Dicksons (Secretary)</a></td>
<td><a href="#" id="kym" onClick="getId(this.id)">Kym Jones (Treasurer)</a></td>
</tr>
<th>Members</th>
<tr height="50">
<td><a href="#" id="john" onClick="getId(this.id)">John Ketley</a></td>
<td><a href="#" id="mike" onClick="getId(this.id)">Mike Lamb</a></td>
<td><a href="#" id="sol" onClick="getId(this.id)">Sol Dean</a></td>
</tr>
</table>
</center>
Проблема в том, что когда я нажимаю на одну из ссылок, модал не отображается, а ссылка исчезает.
Модальный идентификатор для каждого модала устанавливается на то, что передается при нажатии на ссылку (например <div id="howie" class="modal">
Когда я запускаю это через webtools в Mozilla, из JS не обнаруживается ошибок, и код выполняется.
Я никогда раньше не делал ничего подобного, так что, скорее всего, я допустил ошибку новичка. Я рассматривал возможность создания модального и загрузки этой модальной веб-страницы, но применяется то же самое — не уверен, как это сделать в JS.
Комментарии:
1. Идентификаторы должны быть уникальными для документа (поэтому два элемента не могут иметь один и тот же идентификатор). Сделайте так, чтобы ваши модалы имели тот же идентификатор, но с добавлением «-modal», затем используйте
getId(this.id "-modal")
.2. Используете ли вы фреймворк, подобный bootstrap, или обычный ванильный JS и CSS?
3. @Japsz — просто ванильный JS и CSS
4. @HereticMonkey — все идентификаторы элементов разные, поэтому на самом деле не нужно добавлять -modal к this.id часть (я даже не уверен, что это сработает, поскольку первая строка JS выполняет getElementById — или мы здесь говорим о разных целях?)
5. У вас есть ссылка. Он имеет идентификатор
howie
. У вас есть модальный элемент, который содержит то, что вы хотите показать в модале, верно? Он имеет идентификаторhowie
. Это два элемента с одинаковым идентификатором. Если у вас нет модального элемента (и теперь, когда я смотрю на ваш пример, его там нет), то что вы ожидаете увидеть, когда нажмете на ссылку? Хотя вы упоминаете<div id="howie" class="modal">
…