[英]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.