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/


如果您想允许在所有文本字段中输入,则可能更容易不停止按键事件的传播,而是检查事件的来源。

$('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处理字符后触发(keydown、keypress、keyup)。

所以,也许是这样的:

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