2013-02-21 93 views
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; 
} 

我想要的是檢查僅包含數值的文本框。上面的函數是NaN或/^\ d + $ /。test()不起作用,因爲無論我輸入什麼,例如「1」或「10」,它總是返回false。 即使很奇怪,isNaN也曾經工作過一段時間。然後,不管我以前做了什麼,我都沒有辦法解決這個問題。我的javascript驗證號碼功能無法正常工作

調用驗證函數的按鈕位於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部分。在google chrome開發者工具中找到txtbox txtShippedQuantity的正確ID後。

+0

相信該行應be var c = shippedQty.charAt(i); if(isNaN(c)) – 2013-02-21 19:59:20

+0

@BradM這是一個錯字。 changed.thanks。 – Tiger 2013-02-21 20:06:09

+0

不需要測試每個字符,只需要'return/^ \ d + $ /。test(jQuery(「#txtShippedQuantity」).val())' – 2013-02-21 20:26:42

回答

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

這是一個功能正常的演示(帶廣告doryal alert on valid):http://jsfiddle.net/S4CQT/

請注意,如果輸入1,000,將會失敗,因爲它會檢查'1000'是否等於'1,000'。所以,如果你想支持逗號,你有兩個選擇,但一個快速的方法(即會考慮10,00是有效的),是改變本聲明,如果這樣:

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

另一個潛在的失敗是如果你允許非整數(如10.5)。在這種情況下,請查看parseFloat

+0

謝謝。它是整數。我試着你的代碼有相同的問題。沒有運氣。 – Tiger 2013-02-21 20:12:10

+1

然後,你是如何掛鉤它的問題。這裏是顯示它的工作一個的jsfiddle:http://jsfiddle.net/S4CQT/ – Cymen 2013-02-21 20:16:11

+0

呀。我在上面添加了更多細節。 – Tiger 2013-02-21 20:23:54

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" /> 
+0

這應該是一個建議,因爲它是一個解決方法) – 2013-02-21 19:58:58

+0

這是一種解決方法嗎?這是標準化的內置方式來驗證ASP.NET中的控件 – Syddraf 2013-02-21 20:00:23

+1

問題是關於JS,你可以解決方案必須使用ASP.NET驗證器編寫自己的JS – 2013-02-21 20:01:03

0

嗯,不應該

if (isNaN(shippedQty)) 

if (isNaN(c)) 

而且你爲什麼循環時正則表達式可以查詢號碼?

0

http://jsfiddle.net/4nXT3/

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

更新:閱讀註釋知道爲什麼這個壞。

+0

'isNaN()'叫上一個字符串是永遠不會返回true,你proably意思'isNan(parseInt函數(shippedQty),10)' – 2013-02-21 20:04:16

+0

在Chrome的控制檯,isNaN( 「10A」) - >真 – 2013-02-21 20:06:12

+0

我站在糾正。但我不願意給予好評,因爲它似乎isNaN()確實返回了很多誤報,並且應該避免https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/isNan「的ECMAScript(ES6)的下一個版本中包含的功能'Number.isNaN' ......一個可靠的方法來測試x是否是NaN或不...因爲結果是不受誤報,使isNaN不可靠的。 – 2013-02-21 20:11:32

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

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