做老项目兼容EDGE浏览器时,遇到IE下ime-mode: disabled"可以限制用户不允许输入中文,但EDGE浏览器不支持。研究了数个星期写出了下面的方法。但是这个方法有一个致命缺点就是使用中文输入法输入字母时会导致输入框闪烁。如果有js大神有其他解决方法或者更好的方法请告知。

var beginIndex = 0;
var inputId = null;
var intervalId = null;
var endIndex = 0;
//只允许输入数字和字母
//max 允许输入的最大长度。
function inputkeydownNAK(max) {
    if (event.keyCode == 229) {
        var txb = event.srcElement;
        var start = txb.selectionStart;
        var end = txb.selectionEnd;
        beginIndex = start;
        endIndex = end;
        inputId = txb.getAttribute("id");
        console.log(event.code);
        if ((event.code.indexOf("Digit") == -1) && (event.code.indexOf("Numpad") == -1) && (event.code < "KeyA" || event.code > "KeyZ")) {
            txb.disabled = "disabled";
            txb.blur();
            if (intervalId == null) {
                intervalId = setInterval(function () {
                    if (inputId != undefined && inputId != null) {
                        var inputobj = document.getElementById(inputId);
                        inputobj.disabled = "";
                        inputobj.focus();
                        inputobj.selectionStart = beginIndex;
                        inputobj.selectionEnd = beginIndex;
                    }
                    clearInterval(intervalId);
                    intervalId = null;

}, 100);
            }
        } else {
            if ((event.code >= "KeyA" && event.code <= "KeyZ")) {
                txb.disabled = "disabled";
                code = event.code;
                if (intervalId == null) {
                    intervalId = setInterval(function () {
                        if (inputId != undefined && inputId != null) {
                            var inputobj = document.getElementById(inputId);

var temp = inputobj.value;
                            if (temp.length - (endIndex - beginIndex) < max) {
                                inputobj.value = temp.substring(0, beginIndex) + code.replace("Key", "").toLowerCase() + temp.substring(endIndex, temp.length);
                                inputobj.disabled = "";
                                inputobj.focus();
                                inputobj.selectionStart = beginIndex + 1;
                                inputobj.selectionEnd = beginIndex + 1;
                            } else {
                                inputobj.disabled = "";
                                inputobj.focus();
                                inputobj.selectionStart = beginIndex;
                                inputobj.selectionEnd = beginIndex;
                            }
                            clearInterval(intervalId);
                            intervalId = null;
                        }
                    }, 100);
                }
            } else {
                if (start != end) {

} else {
                    if (txb.value.length >= max) {
                        txb.disabled = "disabled";
                        if (intervalId == null) {
                            intervalId = setInterval(function () {
                                if (inputId != undefined && inputId != null) {
                                    var inputobj = document.getElementById(inputId);

inputobj.disabled = "";
                                    inputobj.focus();
                                    inputobj.selectionStart = beginIndex;
                                    inputobj.selectionEnd = beginIndex;

clearInterval(intervalId);
                                    intervalId = null;
                                }
                            }, 100);
                        }
                    }
                }
            }
        }
    }
    else if (event.keyCode == 110 || event.keyCode == 190 || event.keyCode == 108 || event.keyCode == 27 || event.keyCode == 9 || event.keyCode == 8 || event.keyCode == 46 || (event.keyCode <= 105 && event.keyCode >= 96) || (event.keyCode <= 57 && event.keyCode >= 48) || (event.keyCode <= 90 && event.keyCode >= 65) ) {
        inputId = null;
        return true;
    }
    else {
        inputId = null;
        return false;
    }
}

EDGE浏览器ime-mode: disabled“失效不完美解决方法相关推荐

  1. 【Edge浏览器】edge浏览器下载插件时报Download interrupted错误解决方法

    1.打开host文件:C:\Windows\System32\drivers\etc 2.在host文件最后面,添加: 131.253.33.219 edge.microsoft.com 131.25 ...

  2. edge浏览器识别ip地址为手机号的解决办法

    edge浏览器识别ip地址为手机号的解决办法 今天突然发现类似101.231.70.242的ip地址会在edge浏览器里面识别为可点击的链接,后来看了一下,原因就是被识别为手机号了,因为我发现点击的时 ...

  3. edge浏览器如何设置无痕浏览 无痕浏览网页方法

    首先打开电脑的Microsoft Edge浏览器,开始菜单-所有应用-Microsoft Edge. edge浏览器如何设置无痕浏览 无痕浏览网页方法 打开Microsoft Edge浏览器以后,点击 ...

  4. edge和google浏览器打不开!记录一个解决方法!

    2023年5月28日早上 使用小黑盒加速器加速EPIC后,edge和谷歌的浏览器就打不开了,国内的浏览器能打开:如小智浏览器. 网络上的解决方法没有用 这是我找到的解决链接:Bing搜索没法用的解决办 ...

  5. vscode 格式化某一段代码_VSCode格式化代码功能失效的bug解决方法

    VSCode格式化代码功能失效的bug解决方法 前不久我装上了 黑苹果,那么为了快速转移开发环境,我使用了VSCode(Visual Studio Code下面简称VSCode)的插件 Setting ...

  6. android 置灰不可点击,Android Studio 运行按钮灰色的完美解决方法

    Android Studio 运行按钮灰色的完美解决方法 今天新建项目的时候突然发现编译后运行按钮为灰色. 解决方案:第一步:点击图中的Add Configuration,出来如下界面 第二步:点+号 ...

  7. mysql 自动停止_MySQL数据库之mysql自动停止的完美解决方法

    本文主要向大家介绍了MySQL数据库之mysql自动停止的完美解决方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 这两天新买的服务器mysql总是自动停止,查了日志 9:1 ...

  8. kuayu react_React+Spring实现跨域问题的完美解决方法

    最近小编在学习react,在学习过程中遇到React+Spring实现跨域问题,下面小编记录了整个问题过程,给大家做个参考. react 跨域访问后台,默认是有跨域问题,并且火弧和谷歌浏览器,对跨域问 ...

  9. ie11不兼容java_IE11浏览器网页不兼容的四种解决方法

    Edge浏览器已然成为最新win10系统的默认浏览器,但是用户量却远远不及IE11,IE11虽然性能得到了大的改进,但在浏览网页的时候还是会出现一些兼容性的问题,下面小编就讲为大家分享IE 11浏览器 ...

最新文章

  1. CentOS配置网易163 yum源和EPEL yum源
  2. 阻塞队列实现日志接口开发
  3. tensorflow 笔记 16:tf.pad
  4. 统计字符串每个字符出现的次数
  5. Android JSON数据与实体类之间的相互转化-------GSON的简单用法
  6. ubuntu mysql master slave_Ubuntu下MySQL5.5 配置主从(Master Slave)同步
  7. 这17 种方法让 PyTorch 训练速度更快!
  8. [Python] L1-017. 到底有多二-PAT团体程序设计天梯赛GPLT
  9. python 入门拾遗
  10. 【初探IONIC】不会Native可不可以开发APP?
  11. 《UEFI原理与编程》读书笔记
  12. matlab gpu加速,Matlab之GPU加速方法
  13. java 日期 纳秒_java – 具有纳秒的字符串日期转换
  14. 【科创人独家】爱因互动洪强宁:参与创业≠创业,融到钱的那晚我失眠了
  15. 关机、睡眠和休眠有啥区别
  16. Veritas NetBackup8.1.1客户端安装
  17. edge浏览器怎么关闭广告的方法教程
  18. CAD建筑室内图纸素材
  19. C#读取写入excel单元格
  20. 项目管理涉及到的文档

热门文章

  1. poi移动列和删除列(包含代码)
  2. L1-081 今天我要赢
  3. 磁盘空间不足?何不清理下Xcode存储空间
  4. SQL语句做报表统计
  5. 2018年计算机基础知识答案,最全全国计算机基础知识试题及答案考级宝典(2018)...
  6. 情人节送男生什么礼物好,情人节送礼指南
  7. [微信小程序]脱坑指南
  8. 如何学好zbrush?zbrush教程 zbrush能做什么
  9. B站小迪安全学习笔记第7天-CDN绕过技术
  10. 深入理解linux操作系统中的高端内存