2017-04-14 6 views
0

私のコードにモーダルを含めることを試みています。ボタン/ hrefをクリックすると、モーダルに別のファイルが表示されます。私は単にコードをhereから取った。モーダルはほとんどの場合すぐに終了します。

アニメーションを読み込んだ後(または数ms後)、モーダルが閉じます。変わった部分は、ボタンを数回押すと、時々動作し、ファイルが表示されるということです。

// 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 on the button, open the modal 
 
btn.onclick = function() { 
 
    modal.style.display = "flex"; 
 
}; 
 

 
// 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"; 
 
    } 
 
};
/* The Modal (background) */ 
 
.modal { 
 
    display: none; /* Hidden by default */ 
 
    position: fixed; /* Stay in place */ 
 
    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 Content/Box */ 
 
.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); 
 
} 
 

 
/* Modal Header */ 
 
.modal-header { 
 
    padding: 2px 16px; 
 
    background-color: #5cb85c; 
 
    color: white; 
 
} 
 

 
/* Modal Footer */ 
 
.modal-footer { 
 
    padding: 2px 16px; 
 
    background-color: #5cb85c; 
 
    color: white; 
 
} 
 

 
/* 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; 
 
}
<div class="nav1"> 
 

 
     <a href="index.php?page=users&action=login" id="myBtn">Login</a> 
 
     
 
</div> 
 

 
    <div id="myModal" class="modal"> 
 
     <div class="modal-content"> 
 
      <div class="modal-header"> 
 
       <span class="close">&times;</span> 
 
       <h2>Modal Header</h2> 
 
      </div> 
 
      <div class="modal-body"> 
 
       Modal Body 
 
    <?php 
 
    if (isset($_GET["page"])) { 
 
     switch ($_GET["page"]) { 
 
      case "post": 
 
       include "./system/post/index.php"; 
 
       break; 
 
      case "users": 
 
       include "./system/users/index.php"; 
 
       break; 
 
      default: 
 
       include "start.php"; 
 
       break; 
 
     } 
 
    } 
 
    else 
 
    { 
 
     include "start.php"; 
 
    } 
 
    ?> 
 

 
      </div> 
 
      <div class="modal-footer"> 
 
       Modal Footer 
 
      </div> 
 
     </div> 
 
     </div> 
 
    <script src="./system/style/modal.js"></script>

+0

私はあなたがボタンを3回速く押しても何とかしていると分かりましたので、私はそれが助けてくれることが分かりました^^)。 com/file/d/0B4ilpgGKqcEZbzBZaHN3QlhLU1k/view – Niklas

答えて

0

あなたの問題は、イベントの伝播である私には思える:

は、ここに私のコード(関連部分)です。 btnまたはspanのいずれかをクリックするたびに、モーダルは最終的に表示されません。window.onclickが発生し、モーダルが閉じられます。私はあなたが「ここにあなたのコード」であなたのリンクを置くためのサンプル・コードを作成する必要がありbtn.click機能で

btn.onclick = function(event) { 
    event.stopPropagation(); // stop the event to bubble up 
    modal.style.display = "flex"; 
}; 
span.onclick = function(event) { 
    event.stopPropagation(); // stop the event to bubble up 
    modal.style.display = "none"; 
}; 
window.onclick = function(event) { 
    if (event.target == modal) { 
    modal.style.display = "none"; 
    } 
}; 
+0

まずはあなたの努力に感謝します。 FirefoxではFirefoxのように思えますが、コードでは何も起こりませんが、Chromeでは同じ古い問題が発生します。 – Niklas

0
// 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 on the button, open the modal 
btn.onclick = function() { 
    modal.style.display = "Block"; 
    $('a').click(function(e) {e.preventDefault(); /*your_code_here;*/ return false; }); 

}; 

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

だけ編集:だから、解決策はbtn/spanクリックイベントにevent.stopPropagation()を追加することです。

+0

まずはあなたの努力に感謝します。/*あなたのコードはここに入れなければなりません* /?申し訳ありませんが、私は決してjsと "働いたことがない" – Niklas

+0

あなたのリンクを押してください – Hacker

関連する問題