【问题标题】:Getting same image for different modals为不同的模态获取相同的图像
【发布时间】:2020-10-20 01:04:26
【问题描述】:

我无法在模态中获取相同的图像,即使我在它们上有不同的类...我确定这是我的 JS 代码,只是无法弄清楚...任何帮助都很大赞赏。

我还在学习 JS,但知道的就够危险了!我确信这不是最好的编码方式,但我从 W3schools 获取了基础知识并根据我的需要进行了调整。

一开始只有一个模式可以工作,但我想出了如何使代码更详细,现在我得到了相同的图片。

我如何确保它选择了正确的?

这是我的代码:

// Get the modal
var modal = document.getElementById("myModal");

// Get the button that opens the modal
var btn = document.getElementById("myBtn");

// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];

// When the user clicks the button, open the modal 
btn.onclick = function() {
  modal.style.display = "block";
}

// When the user clicks on <span> (x), close the modal
span.onclick = function() {
  modal.style.display = "none";
}

// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
  if (event.target == modal) {
    modal.style.display = "none";
  }
}

// Get the modal
var modal2 = document.getElementById("myModal2");

// Get the button that opens the modal
var btn = document.getElementById("myBtn2");

// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close2")[0];

// When the user clicks the button, open the modal 
btn.onclick = function() {
  modal.style.display = "block";
}

// When the user clicks on <span> (x), close the modal
span.onclick = function() {
  modal.style.display = "none";
}

// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
  if (event.target == modal) {
    modal.style.display = "none";
  }
}
</script>
<button id="myBtn">1</button> <!-- The Modal -->
<div id="myModal" class="modal"><!-- Modal content -->
  <div class="modal-content">
    <img class="img" src="https://bbk12e1-cdn.myschoolcdn.com/ftpimages/772/misc/misc_190683.123dx" /> 
    <span class="close">&#215;</span>
    <div>This is the Galbraith Building</div>
 </div>
</div>

<button id="myBtn2">2</button> <!-- The Modal -->
<div id="myModal2" class="modal2"><!-- Modal content -->
  <div class="modal-content2">
    <img class="img2" src="https://bbk12e1-cdn.myschoolcdn.com/772/photo/2015/06/orig_photo275070_2980857.jpg" /> 
    <span class="close2">&#215;</span>
  <div>This is the Galbraith Building</div>
</div>

【问题讨论】:

  • 我不太明白你需要什么。您是否尝试拥有两个模型,但它们都显示相同的图像?
  • @JoshBonnick 我认为它是一种显示点击按钮图像的模型。
  • 对不起,我没有说得足够清楚 - 我需要每个模式在单击按钮时显示不同的图像。

标签: javascript css simplemodal


【解决方案1】:

您正在为这两个函数调用第一个模式。将第二组更改为 modal2.style.display 应该可以解决您的问题

// Get the modal
var modal = document.getElementById("myModal");

// Get the button that opens the modal
var btn = document.getElementById("myBtn");

// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];

// When the user clicks the button, open the modal 
btn.onclick = function() {
  modal.style.display = "block";
}

// When the user clicks on <span> (x), close the modal
span.onclick = function() {
  modal.style.display = "none";
}

// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
  if (event.target == modal) {
    modal.style.display = "none";
  }
}

// Get the modal
var modal2 = document.getElementById("myModal2");

// Get the button that opens the modal
var btn = document.getElementById("myBtn2");

// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close2")[0];

// When the user clicks the button, open the modal 
btn.onclick = function() {
  modal2.style.display = "block";
}

// When the user clicks on <span> (x), close the modal
span.onclick = function() {
  modal2.style.display = "none";
}

// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
  if (event.target == modal) {
    modal2.style.display = "none";
  }
}

【讨论】:

  • 谢谢!我知道我错过了一些简单的东西。呸!喜欢这个社区。​​span>
【解决方案2】:

虽然@Halmon 解决了你的具体问题,但我认为你不应该重复完整的代码行来做同样的事情。

通用演示可以是这样的(我在里面放了注释):

// this is your modal
let modalCon = document.querySelector('#myModal'); 
// this is an array of images src. it may be helpful if you have more then 2 images.
let chosen = [
'https://bbk12e1-cdn.myschoolcdn.com/772/photo/2015/06/orig_photo275070_2980857.jpg',
'https://bbk12e1-cdn.myschoolcdn.com/ftpimages/772/misc/misc_190683.123dx'
]; 
// since the number of buttons that will trigger the modal
// is the same as the array indexes you can simply:
// a. add event listener when a button clicked
document.querySelectorAll('#modalTrig button').forEach((btn,i) => btn.addEventListener('click',()=> { 
    // b. set the src of modal's image 
    document.querySelector('#myModal img').setAttribute('src', chosen[i]);
    // c. show the modal
    modalCon.classList.add('show');
}));
// this will close the modal
document.querySelector('#close').addEventListener('click', () => { modalCon.classList.remove('show'); });
/* just for demo */
#myModal { 
  width: 85%;
  max-width: 600px;
  margin: auto;
  opacity: 0;
  transition: 1s ease-in-out;
}
#myModal img {max-width: 100%; height: auto;}
#myModal.show { opacity: 1;}
<nav id="modalTrig">
    <button>1</button>
    <button>2</button>
</nav>
<aside id="myModal" class="modal"><!-- Modal content -->
    <button id="close">&#215;</button>
    <figure class="modal-content">
        <img id="img" />         
        <figcaption>This is the Galbraith Building</figcaption>
    </figure>
</aside>

PS - 虽然从示例中学习可以更快,但您应该先学习基础知识。开始here

【讨论】:

    猜你喜欢
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多