android微信keydown事件的keyCode为0情况下JS输入约束实现

来源:互联网 发布:c语言中struct的用法 编辑:程序博客网 时间:2024/06/06 00:00

因为微信不支持keypress事件,keydown/keyup的keycode又为0,没有办法通过这些事件事约束输入,所以,通过input事件变通实现。


原理很简单,每次输入时,记录下光标位置和上一次输入的值,再获取当前值时行检查,不合法时,恢复上次输入值,把光标设置到上一次的位置,由于number类型的input不支持获取和设置光标相关方法,因此,本方法只针对input类型为type的情况,实际上可以解决各种输入。


如里仅允许输入数字,且需要弹出数字键盘,可以通过input的pattern属性解决,例如要弹出数字键盘,pattern属性设置为【pattern="\d*"】


function getCursorPosition (ctrl) {    var CaretPos = 0;   // IE Support    if (document.selection) {        ctrl.focus ();        var Sel = document.selection.createRange ();        Sel.moveStart ('character', -ctrl.value.length);        CaretPos = Sel.text.length;    }    // Firefox support    else if (ctrl.selectionStart || ctrl.selectionStart == '0')        CaretPos = ctrl.selectionStart;    return (CaretPos);}


function setCursorPosition(ctrl, pos){    if(ctrl.setSelectionRange)    {        ctrl.focus();        ctrl.setSelectionRange(pos,pos);    }    else if (ctrl.createTextRange) {        var range = ctrl.createTextRange();        range.collapse(true);        range.moveEnd('character', pos);        range.moveStart('character', pos);        range.select();    }}


function isNumberString(str) {    return str.match("^[0-9]*$");}

addEvent(document.querySelectorAll(".js_number"), "input", function () {    var cursorPos = getCursorPosition(this) - 1;    var orgValue = this.getAttribute("org_value");    if (isEmpty(orgValue)) {        orgValue = "";    }    var value = this.value;    if (!isNumberString(value)) {        this.value = orgValue;        setCursorPosition(this, cursorPos);        return;    }    var maxLength = this.getAttribute("maxlength");    if (maxLength != undefined && maxLength != null) {        if (value.length > maxLength) {            this.value = orgValue;            setCursorPosition(this, cursorPos);            return;        }    }    this.setAttribute("org_value", value);});


var addEvent = (function () {    if (document.addEventListener) {        return function (el, type, fn) {            if (!el) {                return false;            }            //el.addEventListener(type, fn, false);            var objs = [];            if (Object.prototype.toString.apply(el) == "[object NodeList]") {                objs = el;            }            else {                objs[0] = el;            }            for (var i = 0; i < objs.length; i++) {                objs[i].addEventListener(type, fn, false);            }        };    } else {        return function (el, type, fn) {            if (!el) {                return false;            }            //el.attachEvent('on' + type, function () {            //    return fn.call(el, window.event);            //});            var objs = [];            if (Object.prototype.toString.apply(el) == "[object NodeList]") {                objs = el;            }            else {                objs[0] = el;            }            for (var i = 0; i < objs.length; i++) {                objs[i].attachEvent('on' + type, function () {                    return fn.call(el, window.event);                });            }        }    }})();




0 1
原创粉丝点击