asp.net テキストボックスの onkeyup イベントに問題があります。asp.net テキスト ボックスで 10 進数のみを許可する必要があります。それを達成するために、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;
}
ありがとう