1
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;
}

我想要的是检查仅包含数值的文本框。上面的函数 isNaN 或 /^\d+$/.test() 不起作用,因为无论我输入什么,例如“1”或“10”,它总是返回 false。更奇怪的是,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 后。

4

7 回答 7

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

于 2013-02-21T19:58:44.877 回答
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" />
于 2013-02-21T19:57:13.303 回答
0

嗯,不应该

if (isNaN(shippedQty))

if (isNaN(c))

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

于 2013-02-21T19:59:45.150 回答
0

http://jsfiddle.net/4nXT3/

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

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

于 2013-02-21T20:03:08.493 回答
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添加了一个演示

于 2013-02-21T20:17:06.010 回答
0
function ValidateShippedQuantity() {
    var reg = new RegExp("^[0-9]+$");
    return reg.test(jQuery("#txtShippedQuantity").val());
}
于 2013-02-21T20:23:09.063 回答
0

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

function ValidateShippedQuantity() 
    var input = jQuery("#txtShippedQuantity").val();
    if ( !/^\d+$/.test(input) )  {
        alert('Only Numeric Values allowed')
        return false;
    }
    return true
}
于 2013-02-21T20:31:49.190 回答