繁体   English   中英

在JQuery中处理F5

[英]Handling F5 in JQuery

我有一个网站,我想覆盖F5,以便它不刷新页面,而是执行一些ajax调用来刷新某些部分。 这可能吗?

编辑:因为你们似乎都不明白我为什么要做这样的事情,如果你真的有兴趣那么请访问这些链接:

开源项目(简单的网络终端): http//code.google.com/p/web-terminal

简单的网络终端的运行演示: http//web-terminal.net.pine.arvixe.com

实时实施(论坛版): http//www.u413.com

好吧,你可以这样做(至少在某些浏览器中,我不确定这是否适用于跨浏览器),但它确实是一个非常糟糕的用户体验。

$(document).bind('keypress keydown keyup', function(e) {
    if(e.which === 116) {
       console.log('blocked');
       return false;
    }
    if(e.which === 82 && e.ctrlKey) {
       console.log('blocked');
       return false;
    }
});

无论如何,即使有效,用户还可以通过其他方式刷新网站。 ctrl + rcmd + r )或只需按下刷新按钮。 好吧,其他热键组合可以被阻止类似,但无法阻止刷新按钮。

-

最好不要阻止那些默认的浏览器行为,而是优雅地提问。 这可以通过将事件处理程序绑定到onbeforeunload事件来完成,该事件在卸载站点之前触发。

$(window).bind('beforeunload', function() {
    return 'Are you really sure?';
});

除了没有捕获'keypress'事件之外,这与上面接受的答案相同。

如果您捕获'keypress'事件,则还会阻止't'键。 出于某种原因,如果使用'keypress'事件(在chrome调试器中无法看到),则会捕获键码和ASCII键码。 F5键为'116',但't'的ASCII键码也是116,所以使用'keypress'事件可以阻止F5,但你也可以阻止't'应用程序范围。

$(document).bind('keydown keyup', function(e) {
    if(e.which === 116) {
       console.log('blocked');
       return false;
    }
    if(e.which === 82 && e.ctrlKey) {
       console.log('blocked');
       return false;
    }
});

这是coffeescript只是为了好玩:)

$(document).bind "keydown keyup", (e) ->
    if e.keyCode is 116
      console.log "blocked"
      return false
    if e.keyCode is 82 and e.ctrlKey
      console.log "blocked"
      false

以下是关于如何覆盖F5键以增强用户体验的一个示例。 我正在为我的客户端构建新闻稿编辑器,当用户意外按下F5键时我需要阻止页面重新加载,而是刷新从输入的html代码创建的电子邮件预览。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM