您的位置:首页 > 其它

控制文本框只能输入数字和小数点

2013-08-28 15:45 204 查看
当一个文本框是单价文本框的时候。需要只能输入数字和小数点。其他的都为非法输入。找了些资料在加以改进下。虽然不是最好的。但达到了效果,不过整得太长了

    $("#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: '/' });
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: