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

如何实现仅周日显示模态框且提交后至下周日不再展示?

没问题,这个需求可以通过**本地存储(localStorage)**来实现核心的状态记录,结合日期判断就能搞定。我给你梳理下具体的实现思路和代码示例:

实现思路

核心是通过localStorage记录用户提交表单的时间,每次页面加载时做两层判断:

  1. 当前是否是周日(你已经实现这部分,直接复用你的逻辑即可)
  2. 用户是否已经在本次周日周期内提交过表单(即从提交日到下周日之前,不再显示模态框)
具体代码实现

假设你的模态框HTML结构是这样的:

<!-- 模态框 -->
<div id="weeklyModal" class="modal">
  <div class="modal-content">
    <form id="weeklyForm">
      <!-- 表单内容示例 -->
      <input type="text" name="feedback" placeholder="输入你的反馈">
      <button type="submit">Submit</button>
    </form>
  </div>
</div>

然后是JavaScript部分,包含日期判断、存储逻辑和表单提交处理:

// 判断当前是否是周日(JavaScript中getDay()返回0代表周日)
function isSunday() {
  const today = new Date();
  return today.getDay() === 0;
}

// 判断是否已经在本周提交过表单
function hasSubmittedThisWeek() {
  const lastSubmitTime = localStorage.getItem('lastWeeklySubmit');
  if (!lastSubmitTime) return false;

  const lastSubmitDate = new Date(Number(lastSubmitTime));
  const today = new Date();

  // 计算提交日期对应的下周日截止时间(23:59:59)
  const nextSundayAfterSubmit = new Date(lastSubmitDate);
  nextSundayAfterSubmit.setDate(lastSubmitDate.getDate() + (7 - lastSubmitDate.getDay()));
  nextSundayAfterSubmit.setHours(23, 59, 59, 999);

  // 如果当前时间还没到下周日,说明还在禁止显示的周期内
  return today <= nextSundayAfterSubmit;
}

// 初始化模态框显示逻辑
function initModal() {
  const modal = document.getElementById('weeklyModal');
  if (isSunday() && !hasSubmittedThisWeek()) {
    modal.style.display = 'block';
  } else {
    modal.style.display = 'none';
  }
}

// 表单提交处理
document.getElementById('weeklyForm').addEventListener('submit', function(e) {
  e.preventDefault();
  
  // 这里添加你的表单提交逻辑(比如发送请求到后端、处理表单数据)
  // ...

  // 记录提交时间到localStorage
  localStorage.setItem('lastWeeklySubmit', Date.now().toString());
  
  // 隐藏模态框
  document.getElementById('weeklyModal').style.display = 'none';
});

// 页面加载时执行初始化
window.addEventListener('load', initModal);
关键逻辑解释
  1. 日期判断:isSunday()用getDay()快速判断当前是否是周日,和你已有的逻辑完全兼容。
  2. 提交状态校验:hasSubmittedThisWeek()从localStorage取出上次提交的时间戳,计算出提交日对应的下周日截止点。只要当前时间还没到这个截止点,就不再显示模态框。
  3. 表单提交处理:提交成功后,把当前时间戳存入localStorage,同时立即隐藏模态框,确保本次周日周期内不会再弹出。
补充说明
  • localStorage是持久化存储,除非用户手动清除浏览器缓存,否则记录会一直保留。如果需要会话级的存储(关闭浏览器后重置),可以换成sessionStorage,但可能不符合你的需求。
  • 如果你的模态框用了Bootstrap这类UI框架,显示/隐藏的方法可以换成框架自带的API(比如$('#weeklyModal').modal('show')),核心的时间判断和存储逻辑完全不变。

内容的提问来源于stack exchange,提问作者Nathan Boaldin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:42:43