即使使用了 e.preventdefault(),在显示警报窗口后退格在 Firefox 中工作

Posted

技术标签:

【中文标题】即使使用了 e.preventdefault(),在显示警报窗口后退格在 Firefox 中工作【英文标题】:backspace working in firefox after the alert windows is shown even if e.preventdefault() is used 【发布时间】:2017-03-24 07:44:39 【问题描述】:

我需要为我的项目中的所有网页禁用退格键,我已经使用 e.prevent 默认方法完成了它,但是当显示警报时,e.prevent 默认值不起作用,网页只是转到上一页时按退格键。有什么解决办法吗?

if(input)
 alert("wrong input");
 

function disableBackSpace(e)
   var doPrevent = false;
    if (e.keyCode === 8) 
        var d = e.srcElement || e.target;
        if ((d.tagName.toUpperCase() === 'INPUT' && 
             (
                 d.type.toUpperCase() === 'TEXT' ||
                 d.type.toUpperCase() === 'PASSWORD' || 
                 d.type.toUpperCase() === 'FILE' || 
                 d.type.toUpperCase() === 'SEARCH' || 
                 d.type.toUpperCase() === 'EMAIL' || 
                 d.type.toUpperCase() === 'NUMBER' || 
                 d.type.toUpperCase() === 'DATE' )
             ) || 
             d.tagName.toUpperCase() === 'TEXTAREA') 
            doPrevent = d.readOnly || d.disabled;
        
        else 
            doPrevent = true;
        
    

    if (doPrevent) 
        e.preventDefault();
    

每次我按退格键时都会调用上述方法,但是当我在警报窗口中时,这不起作用。基本上,上面的退格代码作为所有网页的 jsp 页面包含在内。

【问题讨论】:

您说的是哪个警报?显示一些代码 How can I disabling backspace key press on all browsers?的可能重复 非 jQuery 版本,作为副本可能更有用:How to capture a backspace on the onkeydown event 上面提到的代码只有当焦点在你正在查看的网页上时才有效,有人请显示一个警告窗口,并且当我在显示警告时按退格键时也阻止退格 【参考方案1】:

$(document).keydown 上添加您的阻止退格代码。

它将出现在整个文档上,无论是否打开任何警报或弹出窗口。

$(document).keydown(function(e)  
            if (e.keyCode == 8) alert('Not Allowed');
    );

JsFiddle Demo

【讨论】:

在问题或标签中没有提到 jQuery。 OP 说明:除非您包含 jQuery 库,否则这将不起作用,您可能想要也可能不想这样做 同样的结果不工作,我已经把这个脚本放在脚本标签下的jsp页面上 即使他上面提到的代码也不起作用,删除警告窗口并输入e.preventDefault()。如果我们按退格键仍然页面会返回

以上是关于即使使用了 e.preventdefault(),在显示警报窗口后退格在 Firefox 中工作的主要内容,如果未能解决你的问题,请参考以下文章

e.preventDefault() 方法到底做了啥? [复制]

e.preventDefault 不适用于 laravel 5.7

我正在使用 React-Bootstrap。 e.preventDefault() 不起作用

调用 e.preventDefault() 后提交表单

反向 e.preventdefault?

引导验证(成功)后,表单使用默认方法而不是 ajax 提交。 e.preventDefault() 不起作用?