【发布时间】: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