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



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。