我对asp.net文本框的onkeyup事件有疑问。我要求在asp.net文本框中只允许十进制数字。为了实现这一点,我从onkeyup事件调用java脚本函数。 javascript函数虽然正确验证了输入,但它无法阻止用户输入字母或字母。使用onkeychange和onkeypress事件一切正常,但它不会检测到退格键,这会导致错误计算依赖于此文本框值的保证金百分比。
<asp:TextBox ID="txtListPrice" runat="server" CssClass="textbox" MaxLength="50"
onkeyup= "return IsNumberKey(event);" > </asp:TextBox>
function IsNumberKey(evt) {
//obj.value = obj.value.replace(/[^0-9]/g, "");
var charCode = (evt.which) ? evt.which : event.keyCode;
if (charCode <= 31 || charCode == 46 || (charCode >= 48 && charCode <= 57)) {
return CalculateMargin();
}
else {
return false;
}
}
function CalculateMargin()
{
var ListPrice = parseFloat(document.getElementById('<%=txtListPrice.ClientID%>').value);
var Cost = parseFloat(document.getElementById('<%=txtCost.ClientID%>').value);
var result = false;
if (ListPrice != NaN && Cost != NaN)
{
if ((ListPrice != "" && Cost != ""))
{
var result = Math.round(((ListPrice - Cost) / (Cost)) * 100);
document.getElementById('<%=txtMargin.ClientID%>').readOnly = false;
document.getElementById('<%=txtMargin.ClientID%>').value = result;
document.getElementById('<%=txtMargin.ClientID%>').readOnly = true;
result = true;
}
else
result = false;
}
return result;
}
由于
答案 0 :(得分:1)
OnKeyUp事件的keycode
属性返回unicode
中按下的字符。您可以使用javascript警报查看退格键的值
alert(event.keyCode);
退格键是unicode 8.您可以在if语句中使用它,然后在按下退格键时运行CalculateMargin
函数。
if (charCode <= 31 || charCode == 46 || (charCode >= 48 && charCode <= 57)
|| charCode == 8)
{
return CalculateMargin();
}
在你的else语句中,在返回false之前,我会删除无效字符,通过搜索字符串并删除任何不是数字的字符,或删除字符串中的最后一个字符,理论上应该是违规字符。您可以使用javascript slice
函数执行此操作。
else
{
var txtListPrice = document.getElementById('<%=txtListPrice.ClientID%>');
var txtValue = txtListPrice.value;
txtListPrice.value = txtValue.slice(0, -1);
return false
}