在 IE11 中按下退格键会回退页面的问题

54 阅读1分钟
  1. 新建 preventBackspace.js

    export const stopBackSpace = (e) => {
          let ev = e || window.event
          // 各种浏览器下获取事件对象
          let obj = ev.relatedTarget || ev.srcElement || ev.target || ev.currentTarget
          // 按下Backspace键
          if (ev.keyCode === 8) {
                // 标签名称
                let tagName = obj.nodeName.toLowerCase();
                // 如果标签不是input或者textarea则阻止Backspace
                if (tagName !== 'input' && tagName !== 'textarea') {
                      return stopIt(ev)
                }
                let tagType = obj.type.toLowerCase() // 标签类型
                // input标签除了下面几种类型,全部阻止Backspace
                if (tagName === 'input' && (tagType !== 'text' && tagType !== 'textarea' && 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;实现阻止元素发生默认的行为
              // window.event.returnValue = false;
          }
          return false
    }
    
  2. 在需要使用的页面引入,例如: App.vue

    import {stopBackSpace} from '@/utils/preventBackspace'
    
    
    mounted(){
       // 兼容ie下 backspace回退问题
       document.onkeypress = stopBackSpace
       document.onkeydown = stopBackSpace
    }