【问题标题】:Javascript cannot capture ESC keyup event in Vivaldi browserJavascript 无法在 Vivaldi 浏览器中捕获 ESC keyup 事件
【发布时间】:2021-10-21 10:12:27
【问题描述】:

我正在开发一个 Javascript 库 (AnyList),用户可以在其中按 ESC 键中止编辑输入字段。这是通过捕获 ESC keyup 事件(使用 jQuery)来实现的:

inp_elem.on("keyup", init_opt, $.proxy(this._processKeyup,this));
...
$.any.DataView.prototype._processKeyup = function (event)
{
  if (event.preventDefault)
    event.preventDefault();
  if (event.type == "keyup" && event.which == 27) { // ESC. In Vivaldi, we never get here.
    ...
  }
  ...

这在 Firefox、Edge、Chrome 等中可以正常工作,但在 Vivaldi 浏览器中却不行 - _processKeyup 方法永远不会被调用。

Vivaldi 使用 ESC 键来停止加载 html 页面,但其他浏览器也是如此,即使我删除了 ESC 键盘映射(Vivaldi 中有一个选项),我也无法捕捉到 ESC我的 Javascript 中的事件。

有人可以帮忙吗?我真的很喜欢 Vivaldi 浏览器,并希望看到它成功,但这种行为不必要地破坏了我的脚本并且非常烦人。

【问题讨论】:

  • 试图阻止默认?
  • 好吧,在传递给 _processKeyup 事件侦听器方法的事件上调用了 preventDefault,但我从来没有走到那一步。我不清楚我应该如何调用 preventDefault before _processKeyup 被调用。
  • onkeyup = function (event) { if (event.type === "keyup" && event.key === 'Escape') { // WORK IN VIVALDI alert('esc') } } 不知道是否有帮助,也许你需要使用你的 _processKeyup fnc。
  • @bZezzz 您的方法之所以有效,是因为它捕获全局“文档”对象上的 keyup 事件,而我尝试捕获特定输入元素上的事件。如果我在输入元素上重新定义 onkeyup 方法,它仍然适用于所有 keyup 事件,但不适用于 ESC:inp_elem.get(0).onkeyup = function (event) { if (event.type === "keyup" && event.key === 'Escape') alert('esc - not in vivaldi'); else alert('not esc - in all browsers'); }
  • @bZezzz 是的,你是对的!确实可以在 Vivaldi 中捕获 keydown 事件(但不是 keyup)。我什至没有想过自己尝试一下……:P 这对我来说就像一个维瓦尔第虫子。无论如何,为 ESC 捕获 keydown 是一种合理的解决方法,因此您的答案已(或将)被接受。 :)

标签: javascript jquery vivaldi esc-key


【解决方案1】:

看来Vivaldi浏览器正在捕捉keyUp事件,所以你最好改用keyDown事件。

一个可行的解决方案可能是这样的:

elem.onkeydown = function (event) {   
    if (event.type === "keydown" && event.key === 'Escape') {
        alert('esc - everywhere'); 
        }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    相关资源
    最近更新 更多