1

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

ありがとう

4

1 に答える 1

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を返す前に、文字列を検索して数字ではない文字を削除するか、理論的には問題のある文字であるはずの文字列の最後の文字を削除して、無効な文字を削除します。これは、javascriptslice関数を使用して行うことができます。

else
{
    var txtListPrice =  document.getElementById('<%=txtListPrice.ClientID%>');
    var txtValue = txtListPrice.value;
    txtListPrice.value = txtValue.slice(0, -1);
    return false
}
于 2012-08-29T17:39:39.053 に答える