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 が少し助けてくれます。そして、1 行を彼のコードに変更します。

        $(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 コードの 2 行目は、少なくとも必要な内容を編集した後、aspx ページの問題の原因です。getTlementById の部分だと思います。Google Chrome 開発者ツールから 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/

「1000」が「1,000」に等しいかどうかをチェックするため、1,000を入力すると失敗することに注意してください。したがって、コンマをサポートする場合は、いくつかのオプションがありますが、簡単な方法(10,00が有効であると見なされます)は、ifのステートメントを次のように変更することです。

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

もう1つの潜在的な失敗は、整数以外の数値(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

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

ええと、すべきではありません

if (isNaN(shippedQty))

なれ

if (isNaN(c))

また、正規表現で数値をチェックできるのに、なぜループしているのですか?

于 2013-02-21T19:59:45.150 に答える
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/フロートやその他の入力形式をサポートする必要がある場合、これはそれほど簡単ではありません。サイメンの提案

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 に答える