码迷,mamicode.com
首页 > 其他好文 > 详细

耗时输入框

时间:2014-09-28 17:13:43      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   os   使用   ar   java   sp   

前言:

在系统中有输入耗时的需求,用于描述一个活动花费多少时间。
具体要求:
精确到分钟,只允许录入小时和分钟,不允许输入不合法的字符,或者做相应的校验。
设计:
根据需求考虑使用js的键盘时间来进行控制,静止非数字以外的字符录入至输入框中,这样就需要校验了。


bubuko.com,布布扣

实现代码(支持ie及chrome)

页面

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
		<title></title>
	</head>
	<script language="JavaScript" type="text/javascript" src="jquery-1.3.1.min.js"></script>
	<!--inputTime.js 用到 jquery-position.js 组件-->
	<script language="JavaScript" type="text/javascript" src="inputTime.js"></script>
	<script language="JavaScript" type="text/javascript">
		$(document).ready(function(){
			bindInputTimeEvent('txt1')
			bindInputTimeEvent('txt2')
		})
	</script>
	<body>
		测试耗时输入框(最大小时数:99	 最大分钟数:59) <br><br>
		耗时1:<input id='txt1' type="text"  value="00:00" maxlength=5/>
		耗时2:<input id='txt2' type="text"  value="00:00" maxlength=5/>
	</body>
</html>


inputTime.js

/**
 * @author 全冠清
 */
$.fn.extend({
	position:function( value ){
		var elem = this[0];
			if (elem&&(elem.tagName=="TEXTAREA"||elem.type.toLowerCase()=="text")) {
			   if($.browser.msie){
					   var rng;
					   if(elem.tagName == "TEXTAREA"){ 
						    rng = event.srcElement.createTextRange();
						    rng.moveToPoint(event.x,event.y);
					   }else{ 
					    	rng = document.selection.createRange();
					   }
					   if( value === undefined ){
					   	 rng.moveStart("character",-event.srcElement.value.length);
					     return  rng.text.length;
					   }else if(typeof value === "number" ){
					   	 var index=this.position();
						 index>value?( rng.moveEnd("character",value-index)):(rng.moveStart("character",value-index))
						 rng.select();
					   }
				}else{
					if( value === undefined ){
					   	 return elem.selectionStart;
					   }else if(typeof value === "number" ){
					   	 elem.selectionEnd = value;
       			         elem.selectionStart = value;
					   }
				}
			}else{
				if( value === undefined )
				   return undefined;
			}
	}
})



/**
 * @author yzp
 */
// 绑定输入框事件
function bindInputTimeEvent(textid){
	$('#'+textid).click(inputTimeClick)
	$('#'+textid).keydown(inputTimeKeydown)
	$('#'+textid).keyup(inputTimeKeyup)
}

// 点击输入框则回到第一个位置
function inputTimeClick(){
	$(this).position(0);
}
/* 
*	按键的首个触发事件,此时的value 还是输入之前的
*  在keydown方法中 如果返回false 输入字符则不在文本框中显示
*/
function inputTimeKeydown(e){
	//alert(event.keyCode);
	//alert($(this).val());
	// 字符超过5个就不能输入
	var inputValue = $(this).val();
	if(inputValue.length>5){
		return false;
	}


	// 进行字符处理,自动更新时间
	if ((e.keyCode>=48 && event.keyCode<=57) || (e.keyCode>=96 && event.keyCode<=105)){ //数字键不禁用
		var inputValue = $(this).val();
		var pos = $(this).position()
		var fontStr 
		var tailStr
		if(pos==2){
			fontStr = inputValue.substring(0,pos)+":";
			pos ++;
			tailStr = inputValue.substring(pos+1,6);
			
		}else{
			fontStr = inputValue.substring(0,pos);
			tailStr = inputValue.substring(pos+1,6);
		}
		if(pos==3){
			if( (e.keyCode>=54 && e.keyCode<=57) || (e.keyCode>=102 && event.keyCode<=105)){
				return false;
			}
		}
		$(this).val(fontStr + tailStr);
		//alert("pos:"  + pos+ "fontStr:"+fontStr + " tailStr" +tailStr )
		$(this).position(pos);

		if($(this).position()==5){
			$(this).position(0);
		}

	} else if((e.keyCode>=37 && event.keyCode<40) || event.keyCode==9){ //方向键不禁用
	
	}else{ //其它键禁用
		return false;
	}
}

/* 
*	按键的第三个触发事件,此时的value是输入之后的
*	
*/
function inputTimeKeyup(e){
	if($(this).position()==5){ 
		$(this).position(0);
	}
}


耗时输入框

标签:style   blog   http   io   os   使用   ar   java   sp   

原文地址:http://blog.csdn.net/metecyu/article/details/39640909

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