当一个文本框是单价文本框的时候。需要只能输入数字和小数点。其他的都为非法输入。找了些资料在加以改进下。虽然不是最好的。但达到了效果,不过整得太长了
$("#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: '/' });