码迷,mamicode.com
首页 > Web开发 > 详细

js获得光标位置和键的ASCLL

时间:2015-05-15 15:40:33      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

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



js获得光标位置和键的ASCLL

标签:

原文地址:http://blog.csdn.net/u010081710/article/details/45743625

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!