我的数字函数的javascript验证无法正常工作

时间:2013-02-21 19:54:54

标签: javascript jquery asp.net html validation

function ValidateShippedQuantity() {
    var shippedQty = jQuery("#txtShippedQuantity").val();
    shippedQty = shippedQty.toString();
    for (i = 0; i < shippedQty.length; i++) {
        var c = shippedQty.charAt(i);
        if (isNaN(c)) //(!(/^\d+$/.test(shippedQty))) 
        {
            alert("Only Numeric Values Allowed");
            //x.focus();
            return false;
        }
    }
    return true;
}

我想要的是检查仅包含数值的文本框。上面的函数是NaN或/ ^ \ d + $ /。test()不起作用,因为它总是返回false,无论我输入什么,如“1”或“10”。 甚至很奇怪,isNaN曾经工作过一段时间。然后,无论我解开了什么,它都无法工作。

调用验证功能的按钮位于Gridview中。

<EditItemTemplate>
 <asp:LinkButton ID="btnUpdTrk" runat="server" Text="Update" CommandName="Update"
    OnClientClick="javascript:return ValidateShippedQuantity();" CausesValidation="false" />
</EditItemTemplate>

txtShippedQuantity的文本框,

<asp:TemplateField HeaderText="Shipped&nbsp;Qty">
   <ItemTemplate>
     <asp:Label ID="lblShippedQuantity" runat="server" Text='<%#Eval("ShippedQuantity")%>'></asp:Label>
   </ItemTemplate>
   <EditItemTemplate>
     <asp:TextBox runat="server" ID="txtShippedQuantity" Width="50px" Text='<%#Eval("ShippedQuantity")%>' />
   </EditItemTemplate>
</asp:TemplateField>

对于遇到相同问题的人,答案或解决方案如下。 这是令人失望的程序后自己解决问题的真正幸福。 @cymen给了我一点帮助。我将一行更改为他的代码。

        $(document).ready(function () {
        $('#btnUpdTrk').on('click', ValidateShippedQuantity);
        });
        function ValidateShippedQuantity() {
        var shippedQty = document.getElementById('ContentPlaceHolder1_gvTrkInfo_txtShippedQuantity_0').value;
        var shippedQtyNumber = parseInt(shippedQty, 10);
        if (shippedQtyNumber.toString() !== shippedQty) {
            alert("Only Numeric Values Allowed for Tracking #.");
            return false;
        }
        return true;
    }

来自@cymen代码的第二行,是我的aspx页面问题的原因,至少在编辑后我得到了我想要的东西。我认为这是getTlementById的一部分。从谷歌浏览器开发人员工具中找到txtbox txtShippedQuantity的正确ID后。

7 个答案:

答案 0 :(得分:2)

您可以使用parseInt将输入字符串解析为数字,然后将数字与原始字符串进行比较:

var input = '5';
var number = parseInt(input, 10);
if (number.toString() === input) {
    // valid
} else {
    // invalid
}

所以我会把你的功能写成:

function ValidateShippedQuantity() {
    var shippedQty = jQuery("#txtShippedQuantity").val();
    var shippedQtyNumber = parseInt(shippedQty, 10);
    if (shippedQtyNumber.toString() !== shippedQty) {
        alert("Only Numeric Values Allowed");
        return false;
    }
    return true;
}

这是一个功能正常的演示(有效的附加提醒):http://jsfiddle.net/S4CQT/

请注意,如果输入1,000,则会失败,因为它会检查'1000'是否等于'1,000'。因此,如果你想支持逗号,你有几个选项,但是快速的方法(将认为10,00有效),将改变if中的语句:

shippedQtyNumber.toString() !== shippedQty.replace(',', '')

另一个潜在的失败是你允许非整数(如10.5)。在这种情况下,请查看parseFloat

答案 1 :(得分:1)

使用ASP.NET验证器

<asp:RegularExpressionValidator ValidationExpression="^\d+$" 
    ControlToValidate="txtShippedQuantity" runat="server" 
    Text="Must be a number" Color="Red" Display="Dynamic" />

如果它与指定的正则表达式不匹配,这将阻止回发客户端。

或者,您可以使用RangeValidator

<asp:RangeValidator 
    MinimumValue='<%# Int32.MinValue %>' 
    MaximumValue='<%# Int32.MaxValue %>' 
    ControlToValidate="txtShippedQuantity" 
    runat="server" />

答案 2 :(得分:0)

嗯,不应该

if (isNaN(shippedQty))

if (isNaN(c))

当正则表达式可以检查数字时,为什么要循环?

答案 3 :(得分:0)

http://jsfiddle.net/4nXT3/

function ValidateShippedQuantity() {
    var shippedQty = jQuery("#txtShippedQuantity").val();
    if (isNaN(shippedQty)) {
        alert('Only Numeric Values Allowed');
        return false;
    }
    return true;
}

更新:阅读评论,了解为什么会这么糟糕。

答案 4 :(得分:0)

您可以使用以下方法,即我认为您的验证方法没有任何问题。

<html>
<head>
    <title></title>
    <meta charset="UTF-8" />
        <script type="text/javascript">
        function ValidateShippedQuantity() { 
    var shippedQty = jQuery("#txtShippedQuantity").val(); //alert(shippedQty);
    shippedQty = shippedQty.toString();
    for (i = 0; i < shippedQty.length; i++) {
        var c = shippedQty.charAt(i);
        if (isNaN(c))         {
            alert("Only Numeric Values Allowed");
            //x.focus();
            return false;
        }

    }
    if(shippedQty.length == 0)
        {
            alert("Field can't be blank");
        }
    return true;
    $("form").submit();
}
    </script>
</head>
<body>
    <form method="GET">
    <input type="text" id="txtShippedQuantity" /><br /><br />
    <input type="submit" value="Validate" onclick="ValidateShippedQuantity()" />
</form>
</body>
</html>

我认为你是因为无法正常调用该函数而犯错。

我也在JSFIDDLE

添加了一个演示

答案 5 :(得分:0)

function ValidateShippedQuantity() {
    var reg = new RegExp("^[0-9]+$");
    return reg.test(jQuery("#txtShippedQuantity").val());
}

答案 6 :(得分:0)

您需要的只是测试所有字符是否为数字的东西。无需循环遍历每个字符,只需使用正则表达式http://jsfiddle.net/4nXT3/如果您需要支持浮点数或其他输入格式,这将不那么容易,在这种情况下,您需要更复杂的like what was suggested by Cymen

function ValidateShippedQuantity() 
    var input = jQuery("#txtShippedQuantity").val();
    if ( !/^\d+$/.test(input) )  {
        alert('Only Numeric Values allowed')
        return false;
    }
    return true
}