1

onKeyPress と onKeyUp の違いを理解しようとしています。アクションが送信される前に onKeyPress が発生し、その後に onKeyUp が発生することを私は知っています。

私の問題は、入力ボタンが押されたときに何が起こるかです?

onKeyPress を使用すると、コードが正常に動作し、送信ボタンが無効になります。onKeyUp を使用すると送信されますが、送信ボタンは何らかの理由でアクティブのままです。

コードは次のとおりです。

<script type="text/javascript">
function InformUser()
{
    window.document.getElementById("loadingMessageDIV").style.display = "block";
   <%=Page.GetPostBackEventReference(btnSubmit as Control)%>
    document.getElementById("btnSubmit").disabled = true;
}

function validateTxt() {
    var input = document.getElementById("<%=txtUserName.ClientID %>").value;
    if(input.length > 0)
    {
        document.getElementById("btnSubmit").disabled = false;
    }
    else
    {
        document.getElementById("btnSubmit").disabled = true;
    }
}

</script>

これは、validateTxt() を呼び出すテキスト ボックスです。

<asp:TextBox ID="txtUserName" runat="server" Font-Size="11pt" 
                onkeyup="validateTxt()"></asp:TextBox>

送信ボタンはこちら

<asp:Button ID="btnSubmit" runat="server" OnClientClick="InformUser();" OnClick="btnSubmit_Click"
                            Text="Login" Font-Bold="True"/>
  <script type="text/javascript">
 document.getElementById("btnSubmit").disabled = true;
 </script>

要約すると、onkeypress を onkeyup に変更すると、バックスペースをキャプチャする機能が得られますが、Enter キーを押しても送信ボタンはアクティブなままです。

onkeyup を onkeypress に変更すると、Enter キーを押して送信ボタンを無効にすることができるようになります。欠点は、バックスペースをキャプチャできないことです。

ありがとう!

解決:

アプシラーのおかげでそれを理解しました。

Enterキーに対してチェックを入れてonkeyupを使用する必要がありました

function validateTxt(event) {
    var input = document.getElementById("<%=txtUserName.ClientID %>").value;
    var key = event.keyCode || event.which;  
    if(input.length > 0 && key != 13)
    {
        document.getElementById("btnSubmit").disabled = false;
    }
    else
    {
        document.getElementById("btnSubmit").disabled = true;
    }
}
4

3 に答える 3

3
  • onKeyPressは、キーボードのいずれかのキーが押されたときに発生します
  • onKeyUpは、キーボードのキーを離したときに発生します。いずれかのキーを押して離さない場合、onKeyPressは起動されますが、onKeyUpも起動されません。

おそらく、フォームでonSubmitの検証を実行することをお勧めします。

于 2012-05-22T18:44:56.050 に答える
3

豆知識: このkeypressイベントは標準の一部ではないため、ブラウザー ベンダーは自由に好きなように動作させることができます。ただし、慣習的にkeypress、印刷可能な表現を持つキーに対してのみ起動します。印刷できないキーの押下 (矢印キー、コントロール キー、バックスペースなど) をキャプチャする場合は、keyup(またはkeydown) が必要です。

使えませんでしたonkeydownか?またはonkeyup、Enter キー ( e.keyCode13) を使用して確認しますか?

その他の注意事項:

keypressキーをkeydown押し続けると繰り返し発火しますが、keyup発火は 1 回だけです。

MDN には、詳細な情報を含む、便利で包括的なKeyboardEvent ガイドがあります。

于 2012-05-22T18:47:40.650 に答える
0

keypress
keyupキーボードのすべてのキーで メタキーが機能しない場合は、アルファベット、数字、および記号に対してのみ機能します</p>

このフィドルで jQuery を使用

于 2012-05-22T18:58:08.917 に答える