使用jQuery或plain js捕获键和触发器函数

时间:2013-01-12 00:13:45

标签: javascript jquery

我在表单中有一个textarea:

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

在输入时,每当用户在textarea中键入字符时,我想为之后键入的每个字符触发一个函数,直到用户点击输入或空格键。

如何使用jQuery或普通JS?

3 个答案:

答案 0 :(得分: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));

答案 1 :(得分: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

有人可能会粘贴一些东西,但这是一个不同的故事

答案 2 :(得分: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/