gpt4 book ai didi

javascript - 在 keydown 事件中处理某些键时遵循默认行为

转载 作者:行者123 更新时间:2023-11-30 13:33:45 25 4
gpt4 key购买 nike

我正在使用 jQuery 处理 html 树上的按键事件。正如您从代码中看到的那样,我正在处理 Tab 键,以便它遍历树。但如果它到达树的末端,我希望它跳出树并进入下一个可用字段。在这种情况下,我尝试返回 true,但这不起作用。

这会阻止其他键也起作用。例如,我也想让 CTRL+R 工作,但当我专注于树时它什么也不做。

我在 e.stopPropagation()e.preventDefault() 被调用之前返回,所以我希望默认浏览器接收到我的事件处理程序,但他们没有。我在其他帖子中读到没有办法强制默认行为,所以我认为我最好的选择就是停止处理事件并传递它,但它没有被传递。有谁知道为什么吗?

$(treeItem).keydown(function(e) {
return onKeyDown(obj, e);
});

var onKeyDown = function(obj, e) {
if (!obj.isRoot) {
switch (e.keyCode) {
case keyCode.LEFT: collapseNode(obj); break;
case keyCode.RIGHT: expandNode(obj); break;
case keyCode.UP: stepUpTree(obj); break;
case keyCode.DOWN: stepDownTree(obj); break;
case keyCode.TAB: if (e.shiftKey) stepUpTree(obj); else stepDownTree(obj); break;
case keyCode.ENTER: me.activateNode(obj); break;
default: return true;
}
}

e.stopPropagation();
e.preventDefault();
}

编辑

我更新了代码以更准确地反射(reflect)正在发生的事情。现在更清楚问题出在哪里了。该事件附加到列表项元素,因此当我返回 true 时,它​​会一直触发所有祖先,直到它到达根。此时,默认行为停止。解决方案是仅在我知道需要时阻止默认行为,而不是将其设为默认行为。

最佳答案

您不必返回 true 来告诉浏览器继续处理该事件;如果您不执行 preventDefaultreturn false,这就是它的作用。只需在 default 子句中 return 即可。 (我希望 return true; 是无害的,但是嘿,你永远不知道。)

您引用的代码中有几个错误。我假设您使用了复制粘贴(您为什么要重新输入它?) 所以我想知道您遇到的问题是否只是抛出错误或逻辑不正确你所期望的。

特别是

  • 您在 onKeyDown 函数定义的参数部分缺少 obje 之间的逗号,因此这是一个语法错误。
  • 您正在关闭 e.keycode。它应该是e.keyCode(注意大写C)。如果上面缺少的逗号实际上不在您的代码中,但这是 e.keycode 将始终为 undefined 并且不匹配您的任何情况,因此一切都会进行为默认

关于javascript - 在 keydown 事件中处理某些键时遵循默认行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5755425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com