2012-06-08 40 views
1

我正在嘗試構建一個應用程序,以便在按「我」時進入插入模式。這很好用,但是它現在將字符「i」插入到文本字段中。下面是我已經嘗試和失敗咖啡文本中的VIM快捷鍵

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

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

回答

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/

0

我認爲你需要使用​​事件,因爲keypress被觸發的字符被處理(keydown, keypress, keyup)之後。

的話,也許是這樣的:

$("body").keydown (e) -> 
    if e.which == 105 
     e.preventDefault() 
     $("#_messages_content").focus() 
+1

按鍵時是好的,因爲它的字符插入文本字段之前仍是起火。不同的是,在keydown中只有關於哪個(實際)鍵被按下的信息是可用的,而在按鍵中你已經知道將插入哪個字符。含義:當你使用keydown事件來做這件事時,你需要檢查'e.which == 73'(I鍵),而在按鍵中你可以檢查小寫字母i(105)。 – Niko