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

如何检测InputElement系统选择器未修改即关闭的触发事件

datetime-local选择器取消操作的事件捕获问题

先看这段代码:

var input  = document.createElement("input");
input.type = "datetime-local";

input.onchange = function() { 
 console.log("date set");
} 

input.showPicker();

这段代码会弹出日期/时间选择器,用户选择日期时onchange事件会正常触发,但如果用户点击选择器外部取消操作,onblur事件并不会生效。

可行解决方案:利用showPicker()返回的Promise

现代浏览器中,input.showPicker()会返回一个Promise,当选择器被关闭(无论用户是确认选择还是取消)时,这个Promise都会resolve。我们可以通过对比操作前后的输入框值,判断用户是否取消了选择:

var input = document.createElement("input");
input.type = "datetime-local";
// 保存选择器弹出前的初始值
const initialValue = input.value;

input.onchange = function() { 
  console.log("date set");
} 

// 监听选择器关闭事件
input.showPicker().then(() => {
  // 对比当前值与初始值,判断是否为取消操作
  if (input.value === initialValue) {
    console.log("用户取消了日期选择");
  }
});

这种方法不需要额外创建全屏div,直接利用API本身的特性处理,更简洁高效。该方案支持Chrome 99+、Edge 99+、Safari 15.4+,主流现代浏览器都已兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:37:08