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

JavaScript在Vivaldi浏览器中无法捕获ESC按键keyup事件求助

解决方案
  • 优先替换监听事件为keydown
    Vivaldi的全局ESC快捷键拦截逻辑作用于keyup事件阶段,keydown阶段不会被浏览器吞掉,是目前兼容性最好的修复方案,修改后的代码参考:
// 仅需把绑定的事件从keyup改为keydown即可
inp_elem.on("keydown", init_opt, $.proxy(this._processKeydown,this));
...
$.any.DataView.prototype._processKeydown = function (event)
{
  if (event.preventDefault)
    event.preventDefault();
  // 对应修改事件类型判断,也可追加event.key判断增强兼容性
  if (event.type == "keydown" && (event.which == 27 || event.key == 'Escape')) { 
    // 原有ESC处理逻辑保持不变
    ...
  }
  ...
}

这个方案兼容所有主流浏览器,原有Firefox、Chrome、Edge的逻辑不受任何影响。

  • 如果必须保留keyup监听逻辑,可以改用原生事件捕获模式
    Vivaldi的keyup拦截仅作用于事件冒泡阶段,在捕获阶段监听可以拿到事件,参考代码:
// 原生事件监听开启捕获模式
inp_elem[0].addEventListener('keyup', (e) => {
  if (e.which === 27 || e.key == 'Escape') {
    // 调用你的原有处理逻辑
    this._processKeyup(e);
    e.stopPropagation();
    e.preventDefault();
  }
}, true); // 第三个参数true代表开启捕获
  • 补充验证点
    绑定事件前确认目标输入框处于聚焦状态,避免因焦点丢失导致事件无法触发的额外问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:45:04