我想通过使用javascript仅用于输入数字来验证asp.net文本框控件。最大数据长度应为3位数。为此,我使用了以下脚本 -
function isNumberKey(evt, obj) {
var charCode = (evt.which) ? evt.which : event.keyCode
var txt = obj.value.length;
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
else {
if (txt < 3) {
return true;
}
else {
return false;
}
}
}
和html代码如下 -
<asp:TextBox ID="txtNoCall" runat="server" onkeypress="javascript:return isNumberKey(event,this);"></asp:TextBox>
验证数字输入。并限制3位数的长度。但问题是,当我按下后退键时,在3位数后,那时它不起作用。
如何解决这个问题?
感谢。
答案 0 :(得分:3)
使用内置的asp.net验证器会更容易,并为您提供服务器和客户端验证
<asp:RegularExpressionValidator id="RegularExpressionValidator1"
ControlToValidate="txtNoCall"
ValidationExpression="\d{3}"
Display="Static"
ErrorMessage="Only 3 digits allowed"
EnableClientScript="True"
runat="server"/>
注意我没有运行这个,但我有一种感觉,即enableclientscript没有在正则表达式验证器上工作,但msdn文档似乎没有提及它的任何内容,所以也许我错了。
答案 1 :(得分:0)
您可以执行类似
的操作if ((txt == 3) && (charCode == 8)) {
obj.value = obj.value.toString().substring(0, txt-1);
}
这是完整的代码。
function isNumberKey(evt, obj) {
var LIMIT = 3;
var charCode = (evt.which) ? evt.which : event.keyCode
var txt = obj.value.length;
if ((txt == LIMIT) && (charCode == 8)) {
obj.value = obj.value.toString().substring(0, txt-1);
}
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
else {
if (txt < LIMIT) {
return true;
}
else {
return false;
}
}
}
答案 2 :(得分:0)
根据documentation设置TextBox.MaxLength。
如果您需要多线,请查看Specifying maxlength for multiline textbox。
如果您尝试自行构建,请确保在测试方案中包含Ctrl-V
和Shift-Ins
(大多数解决方案都不能很好地处理这些问题)。
除此之外,您应该构建服务器端以在那里进行验证。完全解决客户端问题是不可能的(因为用户总是手工制作自己的POST,或者禁用javascript)。