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.event event=arguments.callee.caller.arguments[0] || window.event; } //alert(CaretPos);//打印光标位置 //alert(event.keyCode)//打印键的ASCLL if((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(); } //} }
时间: 2024-10-08 12:20:33