美文网首页
关于键盘Backpace键自动退出系统问题

关于键盘Backpace键自动退出系统问题

作者: cyh_1 | 来源:发表于2021-06-30 22:41 被阅读0次

关于键盘Backpace键自动退出系统问题

  • 遇见需求

    光标在非文本框内,按"Backspace"键,整个页面会回退到系统登录页(谷歌没问题,主要是IE8,火狐以及360等浏览器)

  • 解决方案

    在公共js中,通过js监听backspace按键的按下事件:

  1. 如果标签不是input或者textarea则阻止Backspace
  2. input标签除了(TEXT、TEXTAREA、PASSWORD)这些类型,全部阻止Backspace
  3. input或者textarea输入框如果不可编辑则阻止Backspace
window.document.onkeydown = banBackSpace;

    function banBackSpace(e) {
        var ev = e || window.event;
        //各种浏览器下获取事件对象
        var obj = ev.relatedTarget || ev.srcElement || ev.target || ev.currentTarget;
        //按下Backspace键
        if (ev.keyCode == 8) {
            var tagName = obj.nodeName //标签名称
            //如果标签不是input或者textarea则阻止Backspace
            if (tagName != 'INPUT' && tagName != 'TEXTAREA') {
                return stopIt(ev);
            }
            var tagType = obj.type.toUpperCase(); //标签类型
            //input标签除了下面几种类型,全部阻止Backspace
            if (tagName == 'INPUT' && (tagType != 'TEXT' && tagType != 'TEXTAREA' && tagType != 'NUMBER' && tagType != 'PASSWORD')) {
                return stopIt(ev);
            }
            //input或者textarea输入框如果不可编辑则阻止Backspace
            if ((tagName == 'INPUT' || tagName == 'TEXTAREA') && (obj.readOnly == true || obj.disabled == true)) {
                return stopIt(ev);
            }
        }
    }

    function stopIt(ev) {
        if (ev.preventDefault) {
            //preventDefault()方法阻止元素发生默认的行为
            ev.preventDefault();
        }
        if (ev.returnValue) {
            //IE浏览器下用window.event.returnValue = false;实现阻止元素发生默认的行为
            ev.returnValue = false;
        }
        return false;
    }

为什么使用onkeydown而不使用onkeyup?

因为onkeyup会先执行浏览器默认时间,会导致backspace事件先执行;如果使用onkeyup,可以使用addListener的第三个参数设置成true
  • 注解一:
  1. IE:有window.event对象 Firefox:没有window.event对象。可以通过给函数的参数传递event对象。如onmousemove=doMouseMove(event) 统一的解决方法:var event = event || window.event;
  2. IE:even对象有srcElement属性,但是没有target属性 Firefox:even对象有target属性,但是没有srcElement属性 解决方法:var obj = event.relatedTarget || event.srcElement || event.target || event.currentTarget;

相关文章

网友评论

      本文标题:关于键盘Backpace键自动退出系统问题

      本文链接:https://www.haomeiwen.com/subject/qoxlaqtx.html