リンクをクリックすると特定のdivを表示したり隠したりできますが、コードを使用する場合にのみコードが機能します。なぜこれが起こっているのですか?どうすれば修正できますか?ここでhide/show divをトグルするとボタン上で動作しますが、リンク上で動作しませんか?
私のコードされています。また、ここではcodepenためのリンクです
.popup {
position: relative;
display: inline-block;
}
.popup-content {
display: none;
position: absolute;
\t width: 1000px;
}
.show {
display:block;
}
<div class="popup">
<button onclick="showPopup()" class="btnPopup thePopup">POPUP FROM BUTTON</button>
<a class="linkStyle thePopup" onclick="javascript:showPopup()" href="#" return false;>POPUP FROM LINK</a>
<div id="myPopup" class="popup-content" style="border:1px; border-style:solid; margin:10px; padding: 10px;width:200px;">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatibus quasi voluptas impedit. Culpa impedit?
</div>
</div>
<script>
/* When the user clicks on the button,
toggle between hiding and showing the dropdown content */
function showPopup() {
event.preventDefault();
document.getElementById("myPopup").classList.toggle("show");
return false;
}
// Close the dropdown if the user clicks outside of it
window.onclick = function(event) {
if (!event.target.matches('.thePopup')) {
var dropdowns = document.getElementsByClassName("popup-content");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}
</script>
: http://codepen.io/ZlatinaNyagolova/pen/LkOgzk
UPDATE:
私は別のクラスを追加しましたボタンとリンク私の終了関数でそのクラスをリスナーで使用しました。これはそれを修正しました! :)
ええ、そうだった!私はちょうどこのバリデーションを追加しました: 'if(!event.target.matches( '.btnPopup')&&!event.target.matches( '。linkStyle'))'ありがとう! – Nyagolova
あなたは大歓迎です!バリデーションの拡張についても考えました。あなたがしたいことに依存します。ポップアップを開く方法が複数ある場合(つまり、チェックする数多くの異なるクラスがある場合)、専用のクラスを追加することになります。 if文は本当に長くなり、本当に混乱するかもしれません。 – Holger
さて、これを検討します。これは非常に良い説明と解決策でした - 私はそれを使用し、私の答えを更新しました。再度、感謝します。 :) – Nyagolova