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

HTML input onsearch事件在Safari中不触发的问题及规避方案探讨

解决方案:Safari搜索框清除按钮不触发onsearch的替代方案

针对MacOS Safari 18.3中搜索框清除按钮点击不触发onsearch事件的问题,有以下两种可行的规避方案:

方案1:使用input事件替代onkeyup和onsearch

input事件会在输入框内容发生任何变化时触发(包括字符输入、删除、点击清除按钮清空),兼容性更好,能覆盖所有你需要的场景:

修改原代码中的事件绑定部分:

// 移除原有的onkeyup和onsearch绑定
// inputObj.onkeyup = ...;
// inputObj.onsearch = ...;

// 添加input事件监听
inputObj.addEventListener('input', function(e) {
  SearchTextChange(Category, true, SideMenu);
  StopPropagation(e);
});

这样无论用户是输入字符、退格删除,还是点击清除按钮,都会触发SearchTextChange函数,完全替代原来两个事件的作用。

方案2:监听点击事件判断清除按钮(针对Safari特定场景)

如果你需要保留原有事件逻辑,可额外监听搜索框的点击事件,判断是否点击了内置的清除按钮:

inputObj.addEventListener('click', function(e) {
  // Safari中清除按钮位于输入框右侧,通过点击坐标判断
  const rect = this.getBoundingClientRect();
  const clickX = e.clientX - rect.left;
  // 清除按钮宽度约为20px,可根据实际情况调整阈值
  if (clickX >= rect.width - 25 && this.value.length > 0) {
    SearchTextChange(Category, true, SideMenu);
    StopPropagation(e);
  }
});

这个方案需要根据实际情况调整按钮宽度的阈值,不如方案1通用,但可以在不改动原有事件逻辑的情况下补充处理清除按钮的点击。

额外注意事项

原代码中if (!Visible) tr.style.display = "none";存在变量未定义问题,应改为row.style.display = "none";,避免运行报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:23:26