仅在未键入文本框时才记录document.onkeyup

时间:2012-09-08 01:42:43

标签: php javascript html

我正在尝试使用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>';

2 个答案:

答案 0 :(得分: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' ...

答案 1 :(得分:0)

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

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

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

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