2016-11-29 14 views
1

私はw3schoolを参照してモーダルボックスを作成しました。それはうまくいきますが、1つの問題があります。 1つのモーダルボックスでのみ動作します。ページに2つのモーダルボックスがあるとします。私はそれをモーダル1とモーダル2と呼ぶことにする。2つのモーダルボックスを1つのJavaScriptコードで使用する

<!DOCTYPE html> 
<html> 
<head> 
<style> 
/* The Modal (background) */ 
.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 */ 
.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); 
    -webkit-animation-name: animatetop; 
    -webkit-animation-duration: 0.4s; 
    animation-name: animatetop; 
    animation-duration: 0.4s 
} 
/* Add Animation */ 
@-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} 
} 
/* The Close Button */ 
.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: #5cb85c; 
    color: white; 
} 
.modal-body {padding: 2px 16px;} 
.modal-footer { 
    padding: 2px 16px; 
    background-color: #5cb85c; 
    color: white; 
} 
</style> 
</head> 


<body> 

<p>this is the section for testing modal box</p> 

<!-- Trigger/Open The Modal --> 
<button id="myBtn1">Open Modal</button> 
<button id="myBtn2">Open Modal</button> 


<!-- The Modal 1 --> 
<div id="myModal1" class="modal"> 
    <!-- Modal content --> 
    <div class="modal-content"> 
    <div class="modal-header"> 
     <span class="close">×</span> 
     <h2>FIRST Modal Header</h2> 
    </div> 
    <div class="modal-body"> 
     <p>Some text in the Modal Body 1</p> 
     <p>Some other text...</p> 
    </div> 
    <div class="modal-footer"> 
     <h3> FIRST Modal Footer</h3> 
    </div> 
    </div> 
</div> 



<!-- The Modal 2 --> 
<div id="myModal2" class="modal"> 
    <!-- Modal content 2 --> 
    <div class="modal-content"> 
    <div class="modal-header"> 
     <span class="close">×</span> 
     <h2>SECOND Modal Header</h2> 
    </div> 
    <div class="modal-body"> 
     <p>Some text in the Modal Body 2</p> 
     <p>Some other text...</p> 
    </div> 
    <div class="modal-footer"> 
     <h3>SECOND Modal Footer</h3> 
    </div> 
    </div> 
</div> 

<script> 
var modal = document.getElementById('myModal1'); 

var btn = document.getElementById("myBtn1"); 

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"; 
    } 
} 
</script> 
</body> 
</html> 

は、だから私はどのように行くと次のように私は

..私は、各モーダルボックスのために二度同じJavaScriptコードを記述することなく、モーダルボックスを作成することができるかどうかを確認するためにHTMLとCSSをしようとしていますボタンmyBtn2によって起動された第2モーダルボックスを開き、別の同じJavaScriptコードを作成することなく2番目のモーダルボックスを開く方法について教えてください。

+0

jquery .each()を使用してみましたか?すべてのモーダルクラス要素をループし、見つかった各モーダルの希望するコードを設定することができます。 –

答えて

3

Working fiddle

あなたがdata-*属性を持つ一般的なクラスを使用することができますjqueryのを使用することができるしているので:あなたはクラス1時間にイベントを添付することができ(私の例ではmy-btn)あなたのボタンを同じクラスを与えることによって

$('.my-btn').on('click', function(){ 
    $('#'+$(this).data('modal')).css('display','block'); 
}) 

$('.close').on('click', function(){ 
    $('.modal').hide(); 
}) 

// When the user clicks anywhere outside of the modal, close it 
window.onclick = function(event) { 
    if (event.target.className == 'modal') { 
    $('.modal').hide(); 
    } 
} 

関連するモーダルidをデータ属性(私の例ではdata-modal)に保存してから、ボタンをクリックするとidを取得してモーダルを表示します。

これが役に立ちます。

$('.my-btn').on('click', function(){ 
 
     $('#'+$(this).data('modal')).css('display','block'); 
 
    }) 
 

 
    $('.close').on('click', function(){ 
 
     $('.modal').hide(); 
 
    }) 
 

 
    // When the user clicks anywhere outside of the modal, close it 
 
    window.onclick = function(event) { 
 
     if (event.target.className == 'modal') { 
 
     $('.modal').hide(); 
 
     } 
 
    }
.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 */ 
 
.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); 
 
    -webkit-animation-name: animatetop; 
 
    -webkit-animation-duration: 0.4s; 
 
    animation-name: animatetop; 
 
    animation-duration: 0.4s 
 
} 
 
/* Add Animation */ 
 
@-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} 
 
} 
 
/* The Close Button */ 
 
.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: #5cb85c; 
 
    color: white; 
 
} 
 
.modal-body {padding: 2px 16px;} 
 
.modal-footer { 
 
    padding: 2px 16px; 
 
    background-color: #5cb85c; 
 
    color: white; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p>this is the section for testing modal box</p> 
 

 
<!-- Trigger/Open The Modal --> 
 
<button class="my-btn" data-modal='myModal1'>Open Modal</button> 
 
<button class="my-btn" data-modal='myModal2'>Open Modal</button> 
 

 

 
<!-- The Modal 1 --> 
 
<div id="myModal1" class="modal"> 
 
    <!-- Modal content --> 
 
    <div class="modal-content"> 
 
    <div class="modal-header"> 
 
     <span class="close">×</span> 
 
     <h2>FIRST Modal Header</h2> 
 
    </div> 
 
    <div class="modal-body"> 
 
     <p>Some text in the Modal Body 1</p> 
 
     <p>Some other text...</p> 
 
    </div> 
 
    <div class="modal-footer"> 
 
     <h3> FIRST Modal Footer</h3> 
 
    </div> 
 
    </div> 
 
</div> 
 

 

 

 
<!-- The Modal 2 --> 
 
<div id="myModal2" class="modal"> 
 
    <!-- Modal content 2 --> 
 
    <div class="modal-content"> 
 
    <div class="modal-header"> 
 
     <span class="close">×</span> 
 
     <h2>SECOND Modal Header</h2> 
 
    </div> 
 
    <div class="modal-body"> 
 
     <p>Some text in the Modal Body 2</p> 
 
     <p>Some other text...</p> 
 
    </div> 
 
    <div class="modal-footer"> 
 
     <h3>SECOND Modal Footer</h3> 
 
    </div> 
 
    </div> 
 
</div>

1

私はあなたのクラス名とdocument.querySelectorAllを使用することをお勧めします。 2つのボタンは、データID属性(モーダルIDを参照)を追加します。

<button id="myBtn1" class="modal-open" data-id="#myModal1">Open Modal1</button> 
<button id="myBtn2" class="modal-open" data-id="#myModal2">Open Modal2</button> 

<style> 
    .modal.open { 
    display: block; 
    } 
</style> 

<script> 
    var btns = document.querySelectorAll('.modal-open'); 
    btns.addEventListener('click', function() { 
    var modalId=this.getAttribute('data-id'); 
    document.querySelector(modalId).classList.add('open'); 
    }); 
</script> 

このコードでは、必要な変更についてのみ説明します。

1

W3バージョンではなく別の攻撃を試みたい場合は、このバージョンを頻繁に使用します。それは、即応性とカスタマイズが容易です:

\t \t // Popup Window 
 
\t \t var scrollTop = ''; 
 
\t \t var newHeight = '100'; 
 

 
\t \t $(window).bind('scroll', function() { 
 
\t \t scrollTop = $(window).scrollTop(); 
 
\t \t newHeight = scrollTop + 100; 
 
\t \t }); 
 

 
\t \t $('.popup-trigger').click(function(e) { 
 
    \t \t e.stopPropagation(); 
 
\t \t if(jQuery(window).width() < 767) { 
 
\t \t $(this).after($(this).nextAll('.popup:first')); 
 
\t \t $(this).nextAll('.popup:first').show().addClass('popup-mobile').css('top', 0); 
 
\t \t $('html, body').animate({ 
 
\t \t \t \t scrollTop: $(this).nextAll('.popup:first').offset().top 
 
\t \t \t }, 500); 
 
\t \t } else { 
 
\t \t \t $('.popup').hide(); 
 
\t \t \t $(this).nextAll('.popup:first').removeClass('popup-mobile').css('top', newHeight).toggle(); 
 
\t \t }; 
 
\t \t }); 
 

 
\t \t $('html').click(function() { 
 
\t \t $('.popup').hide(); 
 
\t \t }); 
 

 
\t \t $('.popup-btn-close').click(function(e){ 
 
\t \t $(this).parent().hide(); 
 
\t \t }); 
 

 
\t \t $('.popup').click(function(e){ 
 
\t \t e.stopPropagation(); 
 
\t \t });
@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,600,700'); 
 

 
\t \t \t *, *:before, *:after { margin: 0; padding: 0; box-sizing: border-box; } 
 
\t \t \t body { background: #2F2556; color: #B9B5C7; font: 14px 'Open Sans', sans-serif; } 
 

 
\t \t \t /* You can safely remove the next two lines */ 
 
\t \t \t .top { padding-right: 20px; background: #261F41; text-align: right; } 
 
\t \t \t a { color: rgba(255,255,255,0.6); text-transform: uppercase; text-decoration: none; line-height: 42px; } 
 

 
\t \t \t h1 { padding: 60px 0; font-weight: 400; text-align: center; } 
 
\t \t \t p { margin: 0 0 20px; line-height: 1.5; } 
 

 
\t \t \t .main { margin: 0 auto; padding: 40px 20px; max-width: 960px; font-size: 19px; line-height: 30px;} 
 
\t \t \t .main a { color: #DB7580; text-transform: none; } 
 

 
\t \t \t /* Styling the Popup Window */ 
 
\t \t \t .popup-trigger { display: block; margin: 0 auto; padding: 20px; max-width: 260px; background: #4EBD79; color: #fff; 
 
    \t \t \t \t \t \t font-size: 18px; font-weight: 700; text-align: center; text-transform: uppercase; line-height: 24px; cursor: pointer; } 
 
\t \t \t .popup {display: none; position: absolute; top: 100px; left: 50%; width: 700px; margin-left: -350px; padding: 50px 30px; 
 
    \t \t \t \t \t background: #fff; color: #333; font-size: 19px; line-height: 30px; border: 10px solid #150E2D; z-index: 9999;} 
 
    \t \t \t .popup-mobile {position: relative; top: 0; left: 0; margin: 30px 0 0; width: 100%;} 
 
    \t \t  .popup-btn-close {position: absolute; top: 8px; right: 14px; color: #4EBD79; font-size: 14px; font-weight: bold; text-transform: uppercase; cursor: pointer;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a class="popup-trigger" rel="nofollow">Popup Madrid</a> 
 
\t \t <div class="main"> 
 
\t \t \t This is a version of the Simple Responsive Popup Window that allows you to add more than one (unlimited) number of popups while keeping the code clean and simplified. Resize your browser to test how it behaves on mobile. <br><br> 
 
\t \t \t The functionality is very basic, so you would probably have to built upon it regarding your project needs. To <a href="http://stanhub.com/multiple-responsive-popup-windows-on-same-page/">download this demo</a>, please go to the main article on Stanhub. 
 
\t \t </div> 
 
\t \t <div class="popup"> 
 
\t \t \t Madrid is a city in Europe and the capital and largest city of Spain. The population of the city is almost 3.2 million and that of the Madrid metropolitan area, around 6.3 million. <br><br> 
 
\t \t \t It is the third-largest city in the European Union, after London and Berlin, and its metropolitan area is the third-largest in the European Union after Paris and London. The city spans a total of 604.3 km2 (233.3 sq mi). 
 
\t \t \t <span class="popup-btn-close">close</span> 
 
\t \t </div> 
 

 
\t \t <a class="popup-trigger" rel="nofollow">Popup Rome</a> 
 
\t \t <div class="popup"> 
 
\t \t \t Rome is a city and special comune (named Roma Capitale) in Italy. Rome is the capital of Italy and of the Lazio region. With 2.9 million residents, it is also the country's largest and most populated comune and fourth-most populous city in the European Union by population within city limits. <br><br> 
 
\t \t \t Vatican City is an independent country within the city boundaries of Rome, the only existing example of a country within a city: for this reason Rome has been often defined as capital of two states. 
 
\t \t \t <span class="popup-btn-close">close</span> 
 
\t \t </div>

私はこのコードのための信用を取ることが、非常に多くの場合、それを使用し、それがこのsiteからであることはできません。

ここにはJSFiddleがあります。

関連する問題