0

我正在尝试使用 document.onkeyup 制作导航系统,其中按键盘上的左箭头将用户转发到上一个 ID,并且与右箭头转发到下一个 ID 相同。

我还想使用 R 键将人们带到一个随机 ID,但是还有一个搜索和登录表单,因此当用户在键入时按 R 键时,他们将被转发到另一个页面。

我怎样才能避免这种情况?

这是我的代码

$AddToSite_JavaScript = '<script>
document.onkeyup=checkKeycode;
function checkKeycode(e)
{
    var keycode;
    if(window.event) keycode=window.event.keyCode;
    else if(e) keycode=e.which;

    if(keycode=="37") window.location.href=\''. $WebsiteRoot ."/". $PreviousId ."-". $PreviousTitle .'\';
    else if(keycode=="39") window.location.href=\''. $WebsiteRoot ."/". $NextId ."-". $NextTitle .'\';
    else if(keycode=="13" || keycode=="82") window.location.href=\''. $WebsiteRoot ."/random" .'\';
}
</script>';
4

2 回答 2

1

这部分代码:

> var keycode;
> if(window.event) keycode=window.event.keyCode;
> else if(e) keycode=e.which;

会更好:

var keycode, target;
e = e || window.event;
if (e) {
  keycode = e.keyCode || e.which
  target = e.target || e.srcElement;
}

请注意,这event.srcElement是 IE 特定的,符合 W3C 的浏览器支持event.target.

现在target是其处理程序调用函数的元素,因此稍后您可以执行以下操作:

... && target.tagName.toLowerCase() != 'input' ...
于 2012-09-08T02:16:00.397 回答
0

如果您只使用文本输入:在之后抛出以下代码keycode=="82"就可以了:

&& e.srcElement.tagName != "INPUT"

本质上,它只是检查击键是否来自输入框。

如果您不想在输入中按 enter 来触发它:将现有代码放入 () 中,然后添加它。

于 2012-09-08T02:06:31.693 回答