Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查在加载新页面(JavaScript)时是否已按下键_Javascript_Jquery_Keypress_Keylistener_Keydown - Fatal编程技术网

检查在加载新页面(JavaScript)时是否已按下键

检查在加载新页面(JavaScript)时是否已按下键,javascript,jquery,keypress,keylistener,keydown,Javascript,Jquery,Keypress,Keylistener,Keydown,我目前正在建立一个网站,通过JavaScript使用自定义快速导航 如果用户按向右键,他将被导航到“我的页面列表”中的下一页,通过按ALT+向右键或向左键,他可以在浏览器历史记录中前后导航 这是我当前的代码: var map = []; window.onkeydown = window.onkeyup = function(e){ e = e || event; // to deal with IE map[e.keyCode] = e.type ==

我目前正在建立一个网站,通过JavaScript使用自定义快速导航

如果用户按向右键,他将被导航到“我的页面列表”中的下一页,通过按ALT+向右键或向左键,他可以在浏览器历史记录中前后导航

这是我当前的代码:

var map = [];

    window.onkeydown = window.onkeyup = function(e){
        e = e || event; // to deal with IE
        map[e.keyCode] = e.type == 'keydown';

        if (map[18] && map[39]) { // ALT + Right
            window.history.forward();
        }
        else if (map[18] && map[37]) { // ALT + Left
            window.history.back();
        }
        else if (map[39]) { // Right Key
            window.location.href = "{{ path('sctn_findsong') }}";
        }
        if (map[38]){ // Up Key
            //
        }
        if (map[40]){ // Down Key
            //
        }
    }
除了一个小问题外,一切正常: 假设我想返回三页-如果我是一个有逻辑思维的人,我会先按ALT+Left返回一个站点,然后当我在上一个站点上时,只需按住ALT,然后再按Left返回一个站点。然而,当我返回一个站点并按住ALT键时,它并没有显示ALT仍然被按下,所以每次到达前一个站点时我都必须再次按下ALT键,这非常烦人。 我如何让它以我想要的方式工作?
感谢您的帮助。

您应该查找e.altKey==true以查看alt键是否已关闭

var map = [];

window.onkeydown = window.onkeyup = function(e){
    e = e || event; // to deal with IE
    map[e.keyCode] = e.type == 'keydown';

    if(e.altKey==true){ // ALT down
    if (map[39]) { //  + Right
        window.history.forward();
        //console.log("forward");
    }
    else if (map[37]) { //  + Left
        window.history.back();
        //console.log("back");
    }
    }


    else if (map[39]) { // Right Key
        window.location.href = "{{ path('sctn_findsong') }}";
    }
    if (map[38]){ // Up Key
        //
    }
    if (map[40]){ // Down Key
        //
    }
}

这是不可能的。您需要一个事件keyup或keydown,以便能够在加载新页面后了解ALT键的状态。但是,例如,您可以将状态布尔值向下或向上存储在localStorage中。加载新页面时,您可以读取该值。但是,这可能不可靠,尤其是如果在加载页面之前在页面加载期间释放该键。您还需要在每个加载的页面中包含处理keyevents/localStorage的javascript


您是否考虑过更改Web应用程序的设计,以便通过异步ajax请求加载页面内容?这样,您实际上就不会离开主页面,并且可以跟踪触发的事件。缺点是您需要创建自己的历史记录,因为您实际上没有从浏览器的角度留下页面。一个很好的方法是使用window.location.hash。

如果你不想使用AJAX,可以将页面加载到IFRAME

我在第一个if语句的正前方添加了这一点:if e.AltKey==true{map[18]=true;}-这就是你的想法吗?e.AltKey与map[18]不一样,请参见更新谢谢。我有一个解决问题的B计划,这基本上就是你在第二段中提到的,但我只是希望我忽略了一些明显的东西,这将是一个一行。