代码改变世界

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

2013-08-28 15:45  糯米粥  阅读(650)  评论(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: '/' });