You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两个点击函数作用于同一div:第一个生效第二个失效的JavaScript问题

弹窗关闭按钮失效的解决办法

你的问题出在事件冒泡上:关闭按钮是包裹在触发弹窗的<li id="open-from-to-date">内部的,点击关闭按钮时,事件会向上冒泡到父元素li,触发li的点击事件——也就是刚给弹窗加上dis-none,又被立刻移除了,所以弹窗关不掉。

给你两种解决思路:

方法一:阻止关闭按钮的事件冒泡

修改JS代码,在关闭按钮的点击回调里添加event.stopPropagation(),阻止事件向上传递:

var fromToDate = document.getElementById('from-to-date');
var openFromToDate = document.getElementById('open-from-to-date');
var closeFromToDate = document.getElementById('close-from-to-date');

openFromToDate.addEventListener('click', function() {
  fromToDate.classList.remove('dis-none');
});

closeFromToDate.addEventListener('click', function(event) {
  // 阻止事件冒泡到父元素
  event.stopPropagation();
  fromToDate.classList.add('dis-none');
});

方法二:调整DOM结构,把弹窗移出触发按钮的父元素

把弹窗<div id="from-to-date">从li里拿出来,这样点击关闭按钮就不会触发li的点击事件了:

<li id="open-from-to-date">
  <span class="custom-span-style warning-bk date-span">
    From: 2022-09-16 To: 2022-09-18
  </span>
</li>
<!-- 弹窗移到li外面 -->
<div class="from-to-date dis-none" id="from-to-date">
  <div class="from-to-date-wrapper">
    <div class="close-from-to-date" id="close-from-to-date">
      <i class="fa fa-times" aria-hidden="true"></i>
    </div>
  </div>
</div>

两种方法都能解决问题,选哪种看你的布局需求。

内容的提问来源于stack exchange,提问作者yasser Eltibili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:15:40