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 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后。
答案 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)
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
}