js获得光标位置和键的ASCLL

来源:互联网 发布:奇峰软件 编辑:程序博客网 时间:2024/05/19 04:26

input输入框中,不允许输入某些特殊字符,当输入特殊字符时替换成空。

问题:绑定keyup事件,为了用户输入方便,当用户点击方向键时进行修改,也会触发keyup事件,这时光标会跳到最后一位。。。。

解决方案一:可以用keycode键的ASCll排除掉,但是点击键盘的其他键光标还是会跳到最后一位。

解决方案二:先获得光标的位置信息,然后进行数据处理操作,最后定位到原来光标的位置。

代码如下:

//绑定keyup事件,调用replaceStr()函数function replaceStr(){//获得光标位置var ctrl= document.getElementById('preInfo');var CaretPos = 0;   // IE Support if(!+"\v1"){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;//IE中有event,火狐中arguments.callee.caller.arguments[0] || window.eventevent=arguments.callee.caller.arguments[0] || window.event;}//alert(CaretPos);//打印光标位置//alert(event.keyCode)//打印键的ASCLLif((event.keyCode == 188)||(event.keyCode == 190)||(event.keyCode == 16)||(event.keyCode ==222)){//当键盘输入""&<>特殊符号时,执行替换为空串。var replaceStr=document.getElementById('preInfo').value;replaceStr=replaceStr.replace(/[\"\&\=\:\<\>]+/g,"");document.getElementById('preInfo').value=replaceStr;}//设置光标位置//if(!+"\v1"){if(ctrl.setSelectionRange){ctrl.focus();ctrl.setSelectionRange(CaretPos,CaretPos);console.log(CaretPos);} else if (ctrl.createTextRange) {var range = ctrl.createTextRange();range.collapse(true);range.moveEnd('character', CaretPos);range.moveStart('character', CaretPos);range.select();}//}}



0 0