简体   繁体   English

如何在同一页面上获取多个模式

[英]How to get multiple modals on same page to work

I am trying to get multiple modals to work on the same page and am having some trouble. 我正在尝试让多个模式在同一页面上工作,并且遇到了一些麻烦。

Essentially, I want to know is, why does this work: 本质上,我想知道的是,为什么这样做有效:

<ul class="list">
  <li class="item">
    1
    <button class="open">open</button>
    <div class="modal hide">
      <button class="close">close</button>
      one
    </div>
  </li>
  <li class="item">
    2
    <button class="open">open</button>
    <div class="modal hide">
      <button class="close">close</button>
      two
    </div>
  </li>
  <li class="item">
    3
    <button class="open">open</button>
    <div class="modal hide">
      <button class="close">close</button>
      three
    </div>
  </li>
</ul>

- --

var open = document.querySelectorAll( '.open' );

for ( y=0; y<open.length; y++ ) {
    open[y].addEventListener( 'click', function() {

        var modal = this.parentNode.querySelector( '.modal' );
        modal.classList.remove( 'hide' );
    });
}


var close = document.querySelectorAll( '.close' );

for ( x=0; x<close.length; x++ ) {
    close[x].addEventListener( 'click', function() {
        this.parentNode.classList.add( 'hide' );
    });
}

But this doesn't: 但这不是:
(notice the lack of the button.open , now the "open" event is binded to li.item ... opening still works, but closing does not) (请注意,缺少button.open ,现在将“ open”事件绑定到li.item ...打开仍然可以,但是关闭不起作用)

<ul class="list">
  <li class="item">
    1
    <div class="modal hide">
      <button class="close">close</button>
      one
    </div>
  </li>
  <li class="item">
    2
    <div class="modal hide">
      <button class="close">close</button>
      two
    </div>
  </li>
  <li class="item">
    3
    <div class="modal hide">
      <button class="close">close</button>
      three
    </div>
  </li>
</ul>

- --

var item = document.querySelectorAll( '.item' );

for ( i=0; i<item.length; i++ ) {
    item[i].addEventListener( 'click', function() {

        var modal = this.querySelector( '.modal' );
        modal.classList.remove( 'hide' );
    });
}

var close = document.querySelectorAll( '.close' );

for ( x=0; x<close.length; x++ ) {
    close[x].addEventListener( 'click', function() {
        this.parentNode.classList.add( 'hide' );
    });
}

 var item = document.querySelectorAll( 'li' ); for ( i=0; i<item.length; i++ ) { item[i].addEventListener( 'click', function() { // this.parent will give li and then find modal var modal = this.querySelector('.modal') modal.classList.remove("hide"); }); } var close = document.querySelectorAll( '.close' ); for ( x=0; x<close.length; x++ ) { close[x].addEventListener( 'click', function(e) { // this.parentNode will give directly modal var modal = this.parentNode modal.classList.add("hide"); // Stop child to parent bubbling e.stopPropagation(); }); } 
 .hide{ display: none; } li{ cursor: pointer; } 
 <ul class="list"> <li class="item"> 1(click to open) <button class="open">open</button> <div class="modal hide"> <button class="close">close</button> one </div> </li> <li class="item"> 2(click to open) <button class="open">open</button> <div class="modal hide"> <button class="close">close</button> two </div> </li> <li class="item"> 3(click to open) <button class="open">open</button> <div class="modal hide"> <button class="close">close</button> three </div> </li> </ul> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM