2013-01-12 50 views
-1

我有一個表格內的textarea:捕獲鍵和觸發功能

<textearea id="message"></textarea> 

打字時,只要用戶類型的字符 textarea的裏面,我想觸發功能對於之後輸入的每個人物,直到用戶點擊進入或空格鍵。

這是如何使用jQuery或普通的JS?

回答

2

您可以使用此:

var myCallback = function() { 
    //put your code here 
} 

(function (callback) { 
    var jMessage = $('#message'), 
     callbackCallable = false, 
     keycodeEnter = 13, 
     keycodeSpace = 32; 


    jMessage.keyup(function (e) { 
     var lastLetter = jMessage.val().slice(-1); 
     if (lastLetter === '#') { 
      callbackCallable = true; 
     } else if (e.keyCode === keycodeEnter || e.keyCode === keycodeSpace) { 
      callbackCallable = false; 
     } else if (callbackCallable) { 
      callback(); 
     } 
    }); 
}(myCallback)); 
0

如果您只想檢測打字,您可以聽按鍵事件。

var anyHitYet = false; 
jQuery('#massage').keydown(function (event) { 

    if (anyHitYet) return; 

    var key = event.keyCode; 
    if (key === 51) { 
     //call your function here 
    } else if (key === 13 || key === 32) { 
     anyHitYet = true; 
    } 
}); 

基本上如果是51則#被擊中這麼叫你的函數,如果spaceenter被擊中你的#,直到你做出anyHitYet=false再次

有人可能粘貼 - 當按下功能將不會執行雖然東西所以那是一個不同的故事

+0

而且是的,你可能想閱讀http://stackoverflow.com/faq#questions – kidwon

0

不確定上述答案是否符合OP的要求。 我認爲應該監視第二個或第三個#,直到空間或回程結束監視。

// have a flag somewhere and initialize it to FALSE 
var doMonitor = FALSE; 

$('#message').keydown(function(event){ 

    // trigger monitoring after # was tipped 
    // (only once till space or return reset) 
    if(event.keyCode == 51 && !doMonitor){ 
     doMonitor = TRUE; 
    } 
    else if(event.keyCode == 32 || event.keyCode == 13) 
     doMonitor = FALSE; 
    else if(doMonitor){ 
     // do whatever needs to be done 
    } 
}); 

您也可以將屬性添加到您的#message textarea的和刪除(或更改其值),而不是使用一個變量。

// for setting an attribute 
.attr(attributeName, value) 

// for removing it 
.removeattr(attributeName) 

看這裏http://api.jquery.com/removeAttr/這裏http://api.jquery.com/attr/