2012-05-14 16 views
2

これは、ユーザーがメッセージを入力し、Enterキーを押して送信できるようにするためのものです。これにより、ユーザーは新しいメッセージを入力できるようにボックスがクリアされます。問題は、入力を押す(改行を作成する)標準的な結果がの後でとなっていることです。したがって、テキストが消えて改行で置き換えられますが、これは非常に好ましくありません。どうすればこれを回避できますか?jquery .empty()keypressイベントとの競合

$('#messagebox').keypress(function(event) { 
     if (event.keyCode == '13') { 
      send(); 
      $('#messagebox').empty(); 
     } 
    }); 

答えて

4

あなたは(preventDefault + stopPropagationのためのjQueryの省略形である、あなたのイベントハンドラ関数、またはreturn falseevent.preventDefault()経由keypressのデフォルトの動作を防ぐことができます。

Live example | source

HTML:

<p>Pressing Enter will clear the text area below:</p> 
<textarea id="messagebox" rows="10" cols="50"></textarea> 

のJavaScript:valがあるので、

jQuery(function($) { 

    $("#messagebox").focus().keypress(function(event) { 
    if (event.keyCode === 13) { 
     $(this).val(""); 
     event.preventDefault(); 
    } 
    }); 

}); 

FWIW、私はおそらく、テキストエリアをクリアするというemptyよりも、空の文字列でvalを使用したいです特にフォームフィールドの値を設定する場合  —しかし、empty()

2
$('#messagebox').keypress(function(event) { 
    if (event.keyCode == '13') { 
     event.preventDefault(); 
     send(); 
     $(this).empty(); 
    } 
}); 
+1

...あなたのために働いて、このフィールドに入力されている_all_文字を停止することはありませんか? '.preventDefault()'は 'if'ブロック内になければなりません... – nnnnnn

+0

@nnnnnn:あなたは絶対に正しいです。気づいてくれてありがとう。 –

+0

ええ、bigggg typoがあります。しかし、ありがとう。 – New2This

1

demo

$('#messagebox').on('keydown',function(e) { 
    if (e.which === 13) { 
     send(); 
     $(this).val(''); 
     e.preventDefault(); 
    } 
}); 
+0

これは、元のコードと同じ問題があります。つまり、フィールドはクリアされますが、イベントのデフォルト処理が行われ、改行文字が追加されます。 – nnnnnn

+0

はい、私はe.preventDefault()の感謝を追加しようとしていました。 –