1

「i」を押すと挿入モードになるようなアプリを構築しようとしています。これは素晴らしく機能しますが、現在、文字「i」がテキスト フィールドに挿入されます。以下は私がすでに試したもので、失敗しました

  $("body").keypress (e) ->
      if e.which == 105
        $("#_messages_content").focus()

  $("body").keypress (e) ->
      if e.which == 105
        $("#_messages_content").focus() && $("#_messages_content").val(" ")
4

2 に答える 2

2

一部のアクションを防ぐ必要があります。入力にすでにフォーカスがある場合は、そこに再度ジャンプする必要はありません。それ以外の場合は、フォーカスを入力に設定しますが、「i」を挿入するデフォルトの動作は禁止します。

$('body').keypress (e) ->
  if e.which is 105
    $('#_messages_content').focus()
    e.preventDefault()   # Don't insert the "i"

$('#_messages_content').keypress (e) ->
  e.stopPropagation()​​​​​​​​​​​​​​​​​​​​​    # User is typing, don't propagate the event 

http://jsfiddle.net/whXmj/


すべてのテキストフィールドへの入力を許可する場合は、keypressイベントの伝播をどこでも停止するのではなく、イベントの発生場所を確認する方が簡単な場合があります。

$('body').keypress (e) ->
  if e.which is 105 and e.target.nodeName.toUpperCase() is 'BODY'
    $('#_messages_content').focus()
    e.preventDefault()​​​​​​​​​​

http://jsfiddle.net/whXmj/1/

于 2012-06-08T18:44:06.827 に答える
0

文字が処理された後にイベントがトリガーされるため(keydown、keypress、keyupkeydown )、イベントを使用する必要があると思います。keypress

だから、多分次のようなもの:

$("body").keydown (e) ->
    if e.which == 105
        e.preventDefault()
        $("#_messages_content").focus()
于 2012-06-09T10:56:07.313 に答える