求JS控制文本的解决方案,最好是正则,谢谢!

swazn_yj 2014-05-15 10:17:22

如图所示,有四个文本框只能输入指定的分值,比如第一个只能是:4,3,2,第二个只能是:3,2,1,0,第三个只能是:2,1,0,第四个只能是:1,0.5,0。因为要直接计算四个框的合,所以不想用单选按钮。

请哪个高手帮我想个解决办法,用JS适时检测并限制输入只能是指定几个数字。谢谢!
...全文
439 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyzy15 2014-05-15
  • 打赏
  • 举报
回复
正则如下,不过个人觉得还是下拉框比较好。

 <INPUT TYPE="text" NAME="" onkeyup="fun(0,this)">
 <INPUT TYPE="text" NAME="" onkeyup="fun(1,this)">
 <INPUT TYPE="text" NAME="" onkeyup="fun(2,this)">
 <INPUT TYPE="text" NAME="" onkeyup="fun(3,this)">

	function fun(type, obj){
		var arr = ["^(4|3|2)$", "^(3|2|1|0)$", "^(2|1|0)$", "^(1|(0\.5)|0|0\.)$"]; 
		var reg = new RegExp(arr[type]);
		if (!reg.test(obj.value))
		{
			alert("请填写正确的值");
			obj.select();
		}
	} 
scscms太阳光 2014-05-15
  • 打赏
  • 举报
回复
个人建议:由js对应查到表(上面表格的列项可选值)生成下拉框。即减少工作又保证质量。否则判断数字,必填等等问题累死人
Go 旅城通票 2014-05-15
  • 打赏
  • 举报
回复
引用 5 楼 swazn_yj 的回复:
总共有几十个部门,要是用下拉框会累死人的!


输入更加累吧。。下拉框选择就好了。。如果不想手动增加下拉,用脚本来就行了
<table id="tb" border="1">
<tr><td>部门</td><td>工作推进</td><td>支撑配合及效率</td><td>创新与改进</td><td>服务态度</td></tr>
<tr><td>x部门</td><td></td><td></td><td></td><td></td></tr>
<tr><td>xx部门</td><td></td><td></td><td></td><td></td></tr>
<tr><td>xxx部门</td><td></td><td></td><td></td><td></td></tr>
<tr><td>xxxx部门</td><td></td><td></td><td></td><td></td></tr>
</table>
<script>
var rows = document.getElementById('tb').rows;
for (var i = 1; i < rows.length; i++) {
rows[i].cells[1].innerHTML = '<select><option value="4">4</option><option value="3">3</option><option value="2">2</option></select>';
rows[i].cells[2].innerHTML = '<select><option value="3">3</option><option value="2">2</option><option value="1">1</option><option value="0">0</option></select>';
rows[i].cells[3].innerHTML = '<select><option value="2">2</option><option value="1">1</option><option value="0">0</option></select>';
rows[i].cells[4].innerHTML = '<select><option value="1">1</option><option value="0.5">0.5</option><option value="0">0</option></select>';
}
</script>
swazn_yj 2014-05-15
  • 打赏
  • 举报
回复
都去吃饭了吗?
xuzuning 2014-05-15
  • 打赏
  • 举报
回复
因为各输入框的控制条件不相同 所以判定函数 onlyNum 应传入或俘获当前控件 这样才能根据不同的对象做相应的检查处理 你的 onlyNum 是由按键事件触发的,这样 0.5 就不是很好处理(3次按键) 可改由失去焦点时触发
问天玄铁 2014-05-15
  • 打赏
  • 举报
回复
非要用正则么?貌似判断大小于都可以。重要的是判断了出错了还需要人重填,不如下拉框。
swazn_yj 2014-05-15
  • 打赏
  • 举报
回复
总共有几十个部门,要是用下拉框会累死人的!
  • 打赏
  • 举报
回复
最简单就是用下拉框,让用户选择固定的几个值,无论你用什么控件,都可以 直接计算四个框的和呀,能有什么问题
swazn_yj 2014-05-15
  • 打赏
  • 举报
回复
我也想到数组了,是不是用indexOf() 函数来做判断?
swazn_yj 2014-05-15
  • 打赏
  • 举报
回复
function onlyNum(){
if((event.keyCode>57||event.keyCode<48)&&event.keyCode!=46)
{
alert('请输入数字!');
window.event.keyCode = 0 ;
}
}
function limitDecimal(obj,length,event)
{
 var e = window.event || event;
 if(obj.value.indexOf(".") == -1 || obj.value.indexOf(".") > length)return false;//如果小数点在数字两侧
 if(e.keyCode == 37)return false;//解决光标向左移动的问题
 var index = obj.value.indexOf(".");//获得“.”的位置
 if(obj.value.length-index-1 < length)return false;//不知道这句话是做什么的。
 if(obj.value.substr(index+1,length)!=0 && obj.value.substr(index+1,length)!=5 ){
  obj.value = obj.value.substring(0,index) + obj.value.substr(index,length);
  alert('请输入数字,小数位可以是0.5!');
 }
 obj.value = obj.value.substring(0,index) + obj.value.substr(index,length+1);
 num();
 return false;
}
这个是现在用的控制函数,不能满足要求!
zhjdg 2014-05-15
  • 打赏
  • 举报
回复
数组1 4,3,2 数组2 3,2,1,0 这样不简单明确。

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧