控制文本框只能输入数字和小数点
2013-08-28 15:45 糯米粥 阅读(658) 评论(0) 编辑 收藏 举报当一个文本框是单价文本框的时候。需要只能输入数字和小数点。其他的都为非法输入。找了些资料在加以改进下。虽然不是最好的。但达到了效果,不过整得太长了
$("#changerate").live({ keyup: function () { //键盘按下弹起事件 if (!this.value.match(/^[\+\-]?\d*?\.?\d*?$/)) this.value = this.t_value; else this.t_value = this.value; if (this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/)) this.o_value = this.value;
var value = $(this).val(); if (isNaN(value)) $(this).val(""); //如果不是数字则清空 //alert(parseInt(value)); var r = /^[0-9]*[1-9][0-9]*$/ //如果是正整数,则转换为整数 if (r.test(value)) { $(this).val(parseInt(value)); } $(this).val(Math.abs($(this).val())); //如果输入的是负数 则转换为整数 }, blur: function () { //失去焦点事件 if (!this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?|\.\d*?)?$/)) this.value = this.o_value; else { if (this.value.match(/^\.\d+$/)) this.value = 0 + this.value; if (this.value.match(/^\.$/)) this.value = 0; this.o_value = this.value } }, keypress: function () { //键盘按下后处理事件 if (!this.value.match(/^[\+\-]?\d*?\.?\d*?$/)) { this.value = this.t_value; } else { this.t_value = this.value; } if (this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/)) { this.o_value = this.value } }, paste: function () { return false; }, //不准粘贴 copy: function () { return false; } //不准复制 });
这么一个正则表达式也能达到要求 我的正则表达式能力还得好好努力呢 -_-
var A = document.getElementById("txtA").value; var B = document.getElementById("txtB").value; //alert(parseFloat(A)); if (!/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(B)) { //但这里不能匹配这样 比如 09 你可以自己判断 比如上面的例子 判断是否是整数 是的话则转化为整数在覆盖当前的value即可 alert("输入框有非法字符"); } else { alert("通过验证"); }
//如果你不想用户调用输入法。你可以在input样式中加入:
style="ime-mode: disabled;"
最后发现上面的还是不能满足我的要求 。最后决定用挨个 挨个判断的方式
//我这里是用户可以添加多行 每行有对应的单价框 数量框 然后相乘赋值给对应行的金额框 $("#txtsqqty,#txtprice").live({ blur: function () { ////如果输入的是单价 判断数量是否有值 反之亦然 var id = $(this).attr("id"); var value = $.trim($(this).val()); //如果为空 则不判断 并清空 if (value == "") { $(this).val(""); return; } if (!isNaN(value)) { //如果是数字 看是小数还是整数 var regu = /^([0-9]*[.0-9])$/; // 小数测试 if (!regu.test(value)) { ///是小数 则把小数转为有效的小数后 是负数(-90) 则转为正数赋给当前文本框 比如 0.000 $(this).val(Math.abs(parseFloat(value))); } else { //是整数 则转为有效的整数 赋值给当前文本框 比如 009 $(this).val(parseInt(value)); } } else { if (id == "txtsqqty") alert("【数量输入框】不是有效的数字"); if (id == "txtprice") alert("【单价输入框】不是有效的数字"); return; } } });
上面会有一个bug 因为我是在失去焦点后在判断文本框的值是否合法,不合法在得到焦点。但我现在遇到的问题是。失去焦点后判断不合法。然后 就获不到焦点了
如果你也是这样的。我们可以这样做。弄一个全局变量 标记该文本框的值是否合法 。在其他文本框获得的焦点事件下。判断改标记 如果不合法。在给该文本框获得焦点 即可。
也许你会问 。表格那么多行,你怎么知道是那一行中的哪个 数量框 或者单价框呢? 那么: $("#id tr").index(); 或者 $(this).parent().index(); 都能拿到。该文本框在表格中的索引么。
当然 方法不仅一种。 这只是我想到的方法。
js设置cookie
简单的:$.cookie("order");这是临时cookie,只在当前页面有效
想夸页面取值则:$.cookie("order", "123", { expires: 7, path: '/' });
//删除cookie
$.cookie("order", null, { expires: 7, path: '/' });
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?