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

如何从Cookie取值填充日期输入框?解决刷新后日期框重置问题

解决日期输入框刷新后无法保留值的问题

我完全懂你的困扰——前两个输入框都能通过localStorage稳稳留住值,唯独日期输入框一刷新就重置,这确实挺闹心的。咱们来一步步排查解决:

问题根源

你的日期输入框初始是type="text",只有聚焦时才切换为type="date",这会触发两个关键问题:

  • 页面加载时输入框还是text类型,你给它设置的value如果不符合date类型要求的YYYY-MM-DD格式,后续切换type后浏览器会直接清空内容
  • 动态切换type的时机和赋值时机不匹配,导致输入框无法识别已存储的日期值

解决方案

方案1:直接使用type="date"(推荐)

去掉动态切换type的逻辑,直接把输入框设为type="date",浏览器会自动处理格式校验和展示,存储读取也更顺畅:

修改后的HTML:

<div class="container-fuid">
  <div class="row col-sm-12">
    <div class="col-sm-6">
      <form class="form text-center" id="form1">
        Result: <input id="car_result" type="text" class="form-control"><br>
        Last name: <input id="car_action" type="text" class="form-control">
        <input placeholder="Initial date" class="textbox-n form-control borderform" type="date" name="dei" id="dei" /><br><br>
        <button>Filter</button>
      </form>
    </div>
  </div>
</div>

优化后的jQuery代码(用jQuery选择器简化逻辑):

$(document).ready(function() {
  // 读取localStorage并为字段赋值
  $('#car_result').val(localStorage.getItem('item_result'));
  $('#car_action').val(localStorage.getItem('item_action'));
  
  // 日期字段单独处理,确保值存在再赋值
  const savedDate = localStorage.getItem('item_dei');
  if (savedDate) {
    $('#dei').val(savedDate);
  }
});

$(window).on('beforeunload', function() {
  // 页面刷新/关闭前存储各字段值
  localStorage.setItem('item_result', $('#car_result').val());
  localStorage.setItem('item_action', $('#car_action').val());
  localStorage.setItem('item_dei', $('#dei').val());
});

方案2:保留动态切换type的逻辑(若必须)

如果一定要保留「初始text、聚焦转date」的交互,需要调整赋值时机,先切换type再设置值:

修改后的jQuery代码:

$(document).ready(function() {
  $('#car_result').val(localStorage.getItem('item_result'));
  $('#car_action').val(localStorage.getItem('item_action'));
  
  const dateInput = $('#dei');
  const savedDate = localStorage.getItem('item_dei');
  
  // 先切换为date类型,再赋值确保格式被识别
  dateInput.attr('type', 'date');
  if (savedDate) {
    dateInput.val(savedDate);
  }
  
  // 保留聚焦逻辑(可选,防止意外重置type)
  dateInput.on('focus', function() {
    $(this).attr('type', 'date');
  });
});

$(window).on('beforeunload', function() {
  localStorage.setItem('item_result', $('#car_result').val());
  localStorage.setItem('item_action', $('#car_action').val());
  localStorage.setItem('item_dei', $('#dei').val());
});

额外提示

  • type="date"输入框的值始终是YYYY-MM-DD格式,不管用户看到的本地化展示是什么样,所以存储读取时不用额外做格式转换
  • 测试时记得选一个日期后刷新页面,确认值能正常保留

内容的提问来源于stack exchange,提问作者Mauricio Renan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:23:28