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
- android微信keydown事件的keyCode为0情况下JS输入约束实现
- EXT下keypress与keydown事件中的event.keyCode方法的区别
- 当前对话框响应keydown事件时,无论按下什么键,都传回的keycode值都是229
- KeyPress、KeyDown、KeyUp事件&&KeyCode、KeyChar、KeyData
- C#下的Webbrowser的KeyDown事件
- js模拟keydown事件
- jquery 实现div、span的keydown事件
- js 键盘事件 对应的 keycode
- js keycode 事件响应
- js keycode 事件响应
- Winform下KeyDown,KeyPress,KeyUp事件的总结
- Winform下KeyDown,KeyPress,KeyUp事件的总结
- Winform下KeyDown,KeyPress,KeyUp事件的总结
- android keydown touch事件传递
- 解决js中文输入法下keyCode总为229的问题
- Android: 实现类似QQ、微信的表情输入键盘
- Android: 实现类似QQ、微信的表情输入键盘
- Android平台View的按键事件KeyDown用法
- Java_变量、常量、数值转换、字符串、输入输出
- Oracle Service Bus(OSB) Example
- 如何使用CocoaPods导入第三方类库
- telnet命令
- 关于程序猿的思考问题
- android微信keydown事件的keyCode为0情况下JS输入约束实现
- 三兄弟GETRO、GETTO、SETTO各显神通
- CSDN 社区大趴-北京站 圆满结束
- 面试题5:从尾到头打印链表
- 【HTML】表单form中一单回车就提交的text、一点击就提交的button
- HDOJ 2057A + B Again十六进制问题
- Anaconda无法用PIL,我用Pillow替代
- 屏幕扩展
- openjudge 校门外的树3