基于input文本框实现的数字控件
来源:互联网 发布:前列腺高潮叙述知乎 编辑:程序博客网 时间:2024/05/29 10:28
一、数字组件的实现
1、使用Html的input文件框实现简单的数字编辑控件,基本要求如下
① 点击控件,选中文本;
② 可输入数字,支持数值范围限制,不允许非数字字符输入
③ 键盘方向键(上下左右)可快速增减数值
④ 鼠标离开组件时,根据数值范围自动验证并调整值:超出范围时调整为最近最合适的值
2、以时间组件的小时,实现思路如下
(1)获取焦点:响应focus事件,选中全部文本
(2)失去焦点:响应blur事件,验证文本范围,自动调整为0~23
(3)键盘输入:响应keydown事件。
① ↑→键,数增加,超过59恢复0;
② ↓←键,数减小,低于0变59;
③ 只允许数字,非数字阻止输入;
3、脚本实现如下
NumberControl = { /** * selector:选择器 * minValue:最小值,默认值0 * maxValue: 最大值,可选 */ bind: function (selector, minValue, maxValue) { var $el = $(selector), minValue = minValue || 0, me = this, isCircle = (!!minValue || minValue == 0) && (!!maxValue || maxValue == 0), numSpan = isCircle ? maxValue - minValue + 1 : 0; //focus:获取焦点时选中文本 $el.focus(function () { this.select(); }); //blur:失去焦点时调整数字 $el.blur(function () {//验证 var num = me.intValue($(this).val()); num = num < minValue ? minValue : num > maxValue ? maxValue : num; $(this).val(num); }); //key:限制输入,根据方向键调整大小 $el.keydown(function (e) { if (e.keyCode == 38 || e.keyCode == 39) {//右上:增加 var num = me.intValue($(this).val()); num = numSpan == 0 ? num : (num + 1) % numSpan; $(this).val(num).select(); } else if (e.keyCode == 37 || e.keyCode == 40) {//左下:减少 var num = me.intValue($(this).val()); num = numSpan == 0 ? num : (num + numSpan - 1) % numSpan; $(this).val(num).select(); } else if (e.keyCode == 9) { return true;//tab键 } else if (48 <= e.keyCode && e.keyCode <= 57) {//数字0~9 return true; } return false; }); return $el; }, /* 获取整数:num表示数字或数字字符串,defvalue表示在转换失败时指定的默认值,默认0 */ intValue: function (num, defvalue) { var defvalue = defvalue || 0, value = parseInt(num); return isNaN(value) ? defvalue : value; }}
二、应用:实现时间控件
实现hh:mm格式是时间格式控件。这里的“hh”、“:”、“mm”分别是三个input标签拼接而成,修改border样式使三个input看起来像一个文本框。
效果图如下:
1、时间控件的html
<body> <div> <span>时间:</span> <span><input class="time th" style="border-right:0;" type="text" maxlength="2" value="00" /><input class="time" style="width:7px;border-left:0;border-right:0;" tabindex="-1" readonly="true" value=":" /><input class="time tm" style="border-left:0;text-align:center;" maxlength="2" value="00"/></span> </div></body>
css样式如下:
.time { height:20px; width:18px; border:#ccc 1px solid; margin:0; text-align:center; }
2、使用数字组件
$(function () { NumberControl.bind(".th", 0, 23); NumberControl.bind(".tm", 0, 59); });
3、应用扩展:基于数字组件,还可以实现日期 “2016/1/7” 这样的基本文本的控件
三、总结
在实现时间控件中遇到一些问题及解决方案如下:
1、input标签之间有间隙:“小时”、“:”、“分钟”这三个input标签拼接在一起要像一个文本框一样,就不能有间隙。
在上面提供的html源代码已解决这种问题。需要注意的是,三个<input>标签之间不要使用换行。另一种解决方案,input之间可换行,但是要在前一个input标签上的样式中使用float:left也可解决问题。
2、焦点切换:使用tab键在"小时"“分钟”两个input中切换,但不允许在":"input上获取焦点。解决办法是:在“小时”与“分钟”之间的那个input标签,指定属性tabindex="-1",在使用tab键时,就不会在“:”分隔符input上聚焦。
- 基于input文本框实现的数字控件
- 文本框控件(Input)
- input文本框只能输入数字 点的数字格式
- input文本框只能输入数字
- Jquery实现只能输入数字的文本框
- Jquery实现只能输入数字的文本框
- js控制input文本框只能输入数字
- js限制文本框input只能输入数字
- 一个数字文本框控件,我觉得思路蛮不错的
- 自定义控件——只能输入数字的文本框
- 用javascript实现input文本框只能输入中文的方法
- js控制文本框输入的内容为(数字、字母、汉字)(一、js在控件中实现)
- WML教程11:文本框控件(Input)
- WML教程 文本框控件(Input)
- 只能输入数字和小数点的文本框,多个input求和
- 去掉Input文本框的边框
- 文本框input的高级代码
- input文本框的常用操作
- 成为专业程序员的 6 个技巧
- Java Day8
- 6. 职责链设计模式
- 小猪的Android入门之路 Day 7 part 2
- 小猪的Android入门之路 Day 7 part 3
- 基于input文本框实现的数字控件
- 图文详解YUV420数据格式
- 优秀的程序员都避开了哪些坑?
- lua与c (一)Mac下c 和lua环境搭建
- 小猪的Android入门之路 Day 7 part 4
- SQL学习(三)
- 小猪的Android入门之路 Day 8 part 1
- 黑马程序员_反射的应用
- YUV422 YUV420 Planar \ Semi-Planar \ Interleaved