防止退格按钮导航回上一个 XPage

Posted

技术标签:

【中文标题】防止退格按钮导航回上一个 XPage【英文标题】:Prevent backspace button from navigating back to previous XPage 【发布时间】:2015-02-27 08:28:38 【问题描述】:

在我的 XPages 应用程序中,我注意到每当我按下退格键(输入字段没有焦点)时,应用程序都会返回到前一个 XPage。如何禁用此行为?我相信 JQuery 和/或 Dojo 可以做到这一点,但不确定如何将代码添加到 XPage?另外,阻止这种行为会对性能产生任何影响吗?

【问题讨论】:

不要刹车后退按钮。这是用户期望其浏览器行为方式的基本功能。调整您的流程以使其正常 我指的是退格键 Uuups。很抱歉 Backspace = 返回按钮的键盘快捷键(至少在 Windows 上的 Chrome 和 Firefox 中) 【参考方案1】:

我使用以下代码解决了这个问题(在我将 jquery 添加到 WEB-INF 文件夹之后):

<script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>

<xp:eventHandler event="onClientLoad" submit="false">
    <xp:this.script><![CDATA[

$(document).keypress(function(e) 
var elid = $(document.activeElement).is("input, textarea") ;

if (e.keyCode === 8 && !elid) 
    if(e.ctrlKey) 
        window.history.back()
    
    else 
        alert("Navigating with Backspace has been disabled. Use CTRL + Backspace if you want to go back to the previous page (and lose any unsaved changes).");
        return false;
    

);
]]></xp:this.script>
</xp:eventHandler>

如果在道场也能有解决方案就好了!

编辑:这是此解决方案的 dojo 版本 -

dojo.addOnLoad( function()dojo.connect( document, 'keypress', function(e)

    var activeElementId = document.activeElement.tagName;  

     if(e.keyCode === 8 && activeElementId != "INPUT" && activeElementId != "TEXTAREA") 

     if(e.ctrlKey) 
        window.history.back()
    
     else 
        alert(messageValue);
        dojo.stopEvent(e);
    

        );

);

【讨论】:

【参考方案2】:

Dojo 版本防止 Esc 关闭客户端中的 xPage 选项卡。猜猜你也可以使用类似的东西来解决你的问题。

<xp:eventHandler
        event="onClientLoad"
        submit="false">
        <xp:this.script><![CDATA[dojo.addOnLoad( function() 
 dojo.connect( document, 'keydown', function(e)  
         if(e.keyCode === 27) dojo.stopEvent(e);         
 );
);]]></xp:this.script>
    </xp:eventHandler>

【讨论】:

非常感谢。我决定使用 dojo 而不是 jquery,因为加载 jquery 库可能会对性能产生负面影响。【参考方案3】:

试试这个:

$(document).on('keydown', function(e)
    var kc = e.which || e.keyCode;
    if(kc == 8 && document.activeElement === 'body')
        e.preventDefault();
    
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' />

此解决方案检查活动元素是否为body,然后通过检查是否按下的键是具有8 的 keyCode 的退格键来防止 backspace 键的默认行为。

【讨论】:

您能告诉我如何专门将此代码添加到 XPage 中吗?我试过 但它不会编译 @TonyGuiheen 这不是将 js 代码写入脚本块的正确方法。如果您在脚本标记上应用src 属性,那么脚本块中写入的任何内容&lt;script src='jquery.js'&gt;Will omit this beacuse of src attribute.&lt;/script&gt; 你能给我一个如何添加这段代码的例子吗?

以上是关于防止退格按钮导航回上一个 XPage的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 防止浏览器对退格按钮的默认历史返回操作?

如何防止用户使用浏览器的后退按钮或退格键访问上一个 jsp 页面 [重复]

如何制作“菜单”或“清单”后退按钮以导航回上一个活动

使用导航控制器按下后退按钮后如何防止前一个片段显示?

使用导航控制器按下后退按钮后,如何防止先前的片段出现?

导航组件防止在后按时重新创建片段