亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Javascript 外部單擊時關閉模式

如何在 Javascript 外部單擊時關閉模式

千巷貓影 2023-10-14 19:15:51
我試圖在外部單擊時關閉模式。我嘗試循環瀏覽模態,但無法讓它們將其顯示設置為無。這是我的 HTML:<div class="projects">            <div data-modal="modal1">                <div>                      <p>Coffee</p>                </div>                <img src="img/coffee.png" alt="">            </div>            <div data-modal="modal2">                <div>                       <p>Tea</p>                </div>                <img src="img/tea.png" alt="">            </div>      </div><div class="project-card" id="modal1">            <button class="close">X</button>        <div class="overlay">            <img src="img/coffee.png" alt="">        </div></div>        <div class="project-card" id="modal2">            <button class="close">X</button>        <div class="overlay">            <img src="img/tea.png" alt="">        </div></div>這是我打開模式的代碼。const coffeeGrounds = document.querySelectorAll('.projects > div[data-modal^=modal]');for (var i = 0; i < coffeeGrounds.length; i++) {    coffeeGrounds[i].addEventListener('click', function () {        var x = this.getAttribute('data-modal');        var a = document.getElementById(x);        a.setAttribute('style','display:block');           });}這是我的代碼,當在外部單擊以關閉模式時:window.addEventListener('click',function(){       for(var i = 0; i<coffeeGrounds.length; i++){         var x = coffeeGrounds[i].getAttribute('data-modal');             var a = document.getElementById(x);                console.log(a);                if(a.style.display === 'block'){                      a.setAttribute('style','display:none');                 }             }        });在這里將模態顯示設置為無。它也阻止顯示模式。請提供任何幫助,我們將不勝感激。代碼筆: https: //codepen.io/zaidik/pen/bGwpzbE
查看完整描述

2 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

當您在模態窗口外部單擊時,事件傳播數組中不應包含模態窗口


換句話說,利用 event.path 屬性


工作示例(基于提供的小提琴)


  window.addEventListener('click', function(e) {

  const allModals = document.querySelectorAll('.project-card');

  if (!e.path.some(x => x.className && x.className.includes('project-card'))) {

    allModals.forEach(x => x.style.display = 'none');

  }

}, true)

工作小提琴示例: https: //jsfiddle.net/7pzs1042/


查看完整回答
反對 回復 2023-10-14
?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

window.addEventListener('click', function(e) {

? const allModals = document.querySelectorAll('.project-card');

??

//e.path is deprecated

// use instead e.composedPath() like this:?

? let paths = e.composedPath()

if (!paths.some(x => x.className && x.className.includes('project-card'))) {

? ? allModals.forEach(x => x.style.display = 'none');

? }

}, true)


查看完整回答
反對 回復 2023-10-14
  • 2 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號