js获得光标位置和键的ASCLL

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();
		}
	//}
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值