html javaScript 只能输入数字

/**获取组件选中的内容  */
function getSelectText(obj) {
    if (window.getSelection) {
        if (obj.selectionStart != undefined && obj.selectionEnd != undefined) {
            return obj.value.substring(obj.selectionStart, obj.selectionEnd);
        } else {
            return "";
        }
    } else {
        return document.selection.createRange().text;
    }
}

/**只能输入数字
 * 		|--> 参数:
 *  			|--> e:event
 *  			|--> maxLength:总长度最大值
 *  			|--> precision: 精度
 *  			|--> isNegativeNum: 是否可以输入负数(默认可以)
 */
function noNumbers(e, maxLength, precision, isNegativeNum) {
	var keynum;
	var keychar;
	var numcheck;
	/*FireFox、Opera、Chrome	事件对应的函数有一个隐藏的变量e,表示发生事件。	e有一个属性e.which指示哪个键被按下,给出该键的索引值(按键码)。
		IE只有keyCode属性,FireFox中有which和charCode属性,Opera中有keyCode和which属性,Chrome中有keyCode、which和charCode属性。
	*/
	if (window.event) {  //IE不需要e变量,window.event表示发生事件。
		keynum = e.keyCode;
	} else if (e.which) {
		keynum = e.which;
	}
	keychar = String.fromCharCode(keynum);//静态函数String.fromCharCode()可以把索引值(按键码)转化成该键对应的的字符。
	if (" " == keychar) {
		return false;
	}
	var currentSelectValue = e.currentTarget.value;
	
	// 判断是数字,且小数点后面只保留precision位小数
	if (!isNaN(keychar)) {   //isNaN() 函数用于检查其参数是否是非数字值。非数字值为true
		var index = currentSelectValue.indexOf(".");
		if (index >= 0 && currentSelectValue.length - index > precision) {
			var selectValue = getSelectText(e.currentTarget);
			if(selectValue && currentSelectValue.indexOf(selectValue) > -1){
				return true;
			}
			var cursorPosition = getCursorPosition(e.currentTarget);
			if(cursorPosition <= index){
				//判断整数位长度
				var integerLength = maxLength - precision;
				if(index >= integerLength){
					return false;
				}
				return true;
			}
			return false;
		}
		var selectValue = getSelectText(e.currentTarget);
		//有组件选中时,一不会超出长度
		if(selectValue && currentSelectValue.indexOf(selectValue) > -1){
			return true;
		}
		var maxLength_new = maxLength;
		if (currentSelectValue.indexOf(".") >= 0) {
			maxLength_new++;
		}
		//判断没有点,总长度大于等于最大值
		if(currentSelectValue.indexOf(".") < 0 && currentSelectValue.length >= maxLength_new-precision){
			return false;
		}
		return true;
	}
	// 如果是负号 但不能出现多个 且只能第一位是负号
	if ("-" == keychar) {
		if (currentSelectValue != "") {
			return false;
		}
		if(isNegativeNum) {
			return false;
		}
		if (currentSelectValue.indexOf("-") >= 0) {
			return false;
		}
		return true;
	}
	// 如果是小数点 但不能出现多个 且第一位不能是小数点    
	if ("." == keychar) {
		if(precision == 0) {
			return false;
		}
		if (currentSelectValue == "") {
			return false;
		}
		if (currentSelectValue.indexOf(".") >= 0) {
			return false;
		}
		 //小数点插入时的处理
		var cursorPosition = getCursorPosition(e.currentTarget);
		if(currentSelectValue.length - cursorPosition > precision){
			e.currentTarget.value = currentSelectValue.substring(0,cursorPosition)+"."+currentSelectValue.substring(cursorPosition,precision+cursorPosition);
			return false;
		}
		return true;
	}
	return false;
}
/** 获取光标的位置 */
function getCursorPosition(obj){
    var cursurPosition=-1;
    if(obj.selectionStart){//非IE浏览器
        cursurPosition= obj.selectionStart;
    }else{//IE
        var range = document.selection.createRange();
        range.moveStart("character",-obj.value.length);
        cursurPosition=range.text.length;
    }
    return cursurPosition;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值