0

特定のテキストボックスにフォーカスがあるときに「Enter」キーを押すと、JavaScript コードを実行しようとしています。これが発生した場合、ページをポストバックしたくありません。(ただし、誰かが [送信] ボタンをクリックした場合は、通常どおりページをポストバックする必要があります。)

次のコンテンツのページがあります。

<script type="text/javascript">
$(function () {
    $('#txtInput').on('keyup', function (e) {
        if (e.keyCode == 13) {
            alert('enter was clicked');
            return false;
        }
    });
});
</script>

<asp:TextBox ID="txtInput" runat="server" ClientIDMode="Static"></asp:TextBox>
<asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmitClick" Text="Submit" />

私はいつもそれがこれを達成する方法だと思っていreturn false;ましたが、このシナリオではうまくいきません。

また、JavaScript関数で次のことを試しましたが、役に立ちませんでした。

$(function () {
    $('#txtInput').on('keyup', function (e) {
        if (e.keyCode == 13) {
            e.cancel = true;
            e.returnValue = false;
            alert('enter was clicked');
        }
    });
});

私の質問は次のとおりです。

1. これが機能しないのはなぜですか?

2. この動作を実現するにはどうすればよいですか?

4

4 に答える 4

1

キーが離される前に発生し、キャンセルできるため、keypress イベントを使用する必要があります。

コメントを引用:

keyup イベントが原因である可能性があります。理論的には鍵はすでに上がっているので、イベントはすでに発生しています。 代わりにキープレスを試しましたか?

于 2013-02-16T16:00:34.140 に答える
0

使ってみましたe.PreventDefault()か?この場合、デフォルトのイベントを使用keydownまたはkeypressキャッチする必要がある場合もあります。

<script type="text/javascript">
$(function () {
    $('#txtInput').on('keydown', function (e) {
        if (e.which == 13) {
            e.PreventDefault();
            alert('enter was clicked');
        }
    });
});
</script>

ただし、キーボードの機能を壊すことで、アクセシビリティ標準に対応していないことを知っておく必要があります。これにより、一部のユーザーにとっては困難になる可能性があります。キーボードのみのユーザーがナビゲートできる方法を提供してください。

編集:問題 (ASP.NET) の性質上、別の方法でこれにアプローチする必要がある場合があります。

a) この質問を見ることができます: ASP.NET の既定の送信ボタンをキャンセルするか、b) 上記の Javascript ソリューションを適用しますが、要素ではなくドキュメント全体に適用します。

アクセシビリティ ユーザーの機能が損なわれる可能性があるため、2 番目の方法はお勧めしません。

于 2013-02-14T17:49:25.990 に答える
0

これをテストしたところ、キーダウンイベントでのみ機能します.キーが離されたときは遅すぎます:

$(function () {
    $('#txtInput').on('keydown', function(e) {
        if (e.which == 13) e.preventDefault();
    });
});

フィドル

于 2013-02-14T17:41:44.180 に答える
0
function PreventEnterKeyInTextBox(){
$('#txtInput').keypress(function(evt){evt=(evt)?evt:window.event; 
if(evt.keyCode==13){
    if($.browser.msie)
         {evt.cancelBubble=true; evt.returnValue=false;}
    else{evt.preventDefault();}
 }});
}
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PreventEnterKeyInTextBox);
//Or $(document).ready(function(){PreventEnterKeyInTextBox();});
于 2013-02-14T20:07:03.287 に答える