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

      做老项目兼容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;
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值