为了账号安全,请及时绑定邮箱和手机立即绑定

如何防止Backspace键回退?

如何防止Backspace键回退?

凤凰求蛊 2019-10-04 16:02:00
在IE上,我可以使用jQuery(非常不标准,但可以正常使用)if ($.browser.msie)    $(document).keydown(function(e) { if (e.keyCode == 8) window.event.keyCode = 0;});但是,是否有可能以在Firefox上运行的方式或以跨浏览器的方式获得奖励呢?作为记录:$(document).keydown(function(e) { if (e.keyCode == 8) e.stopPropagation(); });什么也没做。$(document).keydown(function(e) { if (e.keyCode == 8) e.preventDefault(); });解决了问题,但使退格键在页面上不可用,这甚至比原始行为还差。编辑:我这样做的原因是我不是在创建一个简单的网页而是一个大型应用程序。仅仅因为您在错误的位置按了退格键,就失去了10分钟的工作,这真是令人讨厌。通过防止退格键向后导航,防止错误与烦扰用户的比率应远高于1000/1。EDIT2:我不是要阻止历史导航,只是出于意外。EDIT3:@brentonstrines评论(由于该问题非常受欢迎,因此移至此处):这是一个长期的“解决方法”,但是您可以在Chromium错误的背后给予支持以更改Webkit中的此行为
查看完整描述

3 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

这段代码至少在IE和Firefox中解决了该问题(尚未测试过其他任何工具,但即使在其他浏览器中也存在问题,我也给了它合理的工作机会)。


// Prevent the backspace key from navigating back.

$(document).unbind('keydown').bind('keydown', function (event) {

    if (event.keyCode === 8) {

        var doPrevent = true;

        var types = ["text", "password", "file", "search", "email", "number", "date", "color", "datetime", "datetime-local", "month", "range", "search", "tel", "time", "url", "week"];

        var d = $(event.srcElement || event.target);

        var disabled = d.prop("readonly") || d.prop("disabled");

        if (!disabled) {

            if (d[0].isContentEditable) {

                doPrevent = false;

            } else if (d.is("input")) {

                var type = d.attr("type");

                if (type) {

                    type = type.toLowerCase();

                }

                if (types.indexOf(type) > -1) {

                    doPrevent = false;

                }

            } else if (d.is("textarea")) {

                doPrevent = false;

            }

        }

        if (doPrevent) {

            event.preventDefault();

            return false;

        }

    }

});


查看完整回答
反对 回复 2019-10-04
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

该代码在所有浏览器上都有效,并且当不在form元素上,或者form元素被禁用| readOnly时,将吞下退格键。它也是有效的,当它在键入的每个键上执行时很重要。


$(function(){

    /*

     * this swallows backspace keys on any non-input element.

     * stops backspace -> back

     */

    var rx = /INPUT|SELECT|TEXTAREA/i;


    $(document).bind("keydown keypress", function(e){

        if( e.which == 8 ){ // 8 == backspace

            if(!rx.test(e.target.tagName) || e.target.disabled || e.target.readOnly ){

                e.preventDefault();

            }

        }

    });

});


查看完整回答
反对 回复 2019-10-04
  • 3 回答
  • 0 关注
  • 724 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信