【问题标题】:how to detect an F5 refresh keypress event in jquery?如何在 jquery 中检测 F5 刷新按键事件?
【发布时间】:2012-12-14 04:51:55
【问题描述】:

我注意到 jquery 有一个按键功能。但它似乎只能检测数字和字符的按键事件。它无法检测 F5 按键事件。而最让我惊讶的是网上大家都说F5的keyCode是116,但是我用jquery keypress功能的时候,却只是显示字符t的keyCode是116(好像116是小写的ascii码t)!有人可以给我任何想法以及如何在 javascript 或 jquery 中检测 F5 事件吗?提前非常感谢。

【问题讨论】:

  • 我认为任何浏览器都不会让您捕获功能按钮按下的事件...
  • @SidharthMudgal - Why not
  • 你不认为location.reload();和'F5'一样
  • 当您检测到它时,无论如何都为时已晚,因为页面将重新加载,您也可以使用onbeforeunload ?

标签: javascript jquery keypress


【解决方案1】:

我不知道你在代码中做错了什么,但 jQuery 确实说 F5116t84

http://jsfiddle.net/Brjb2/1

一个可能的错误是keypress 会有不同的keycode,这就是为什么keydown 更受欢迎。

        |  T  |  A  |  F5
keydown |  86 |  65 | 116
keypress| 116 |  97 |  -

同样按下F5 也不会触发keypress,因为重新加载部分发生在keypress 之前。

【讨论】:

    【解决方案2】:

    keypress 事件不接受功能键(F1-F12)。您可以尝试使用 keydown 事件。

    【讨论】:

    • 完全正确。更具体地说,“按键”是指输入某些内容的事件。如果您按下的按钮会导致文本区域中发生某些事情,则将触发 keypress 事件。但是,keydown 会触发所有键。
    • 如果你按住一个普通键,'keypress' 将被重复触发,但是每次击键只会触发一次'keydown'。
    • 这与它最初触发的原因相同。它的频率取决于键盘设置。
    • 是的。这个话题可以参考这里quirksmode.org/js/events_order.html的JS事件模型/顺序。
    【解决方案3】:

    这段代码对我有用
    我在 chrome 和 firefox 中测试成功

    <script>
        document.onkeydown = capturekey;
        document.onkeypress = capturekey;
        document.onkeyup = capturekey;
    
        function capturekey(e) {
            e = e || window.event;
            //debugger
            if (e.code == 'F5') {
                if (confirm('do u wanna to refresh??')) {
                    //allow to refresh
                } 
                else {
                    //avoid from refresh
                    e.preventDefault()
                    e.stopPropagation()
                }
            }
        }
    </script>
    

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 2012-04-25
      • 2011-02-25
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      相关资源
      最近更新 更多