Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery或普通js捕获键和触发器函数_Javascript_Jquery - Fatal编程技术网

Javascript 使用jQuery或普通js捕获键和触发器函数

Javascript 使用jQuery或普通js捕获键和触发器函数,javascript,jquery,Javascript,Jquery,我在表单中有一个文本区域: <textearea id="message"></textarea> 键入时,每当用户在文本区域内键入字符#时,我希望为随后键入的每个字符触发一个函数,直到用户点击enter键或空格键 使用jQuery或普通JS怎么可能做到这一点?如果您只想检测键入,您可以监听按键事件 var anyHitYet = false; jQuery('#massage').keydown(function (event) { if (anyHit

我在表单中有一个文本区域:

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

键入时,每当用户在文本区域内键入字符#时,我希望为随后键入的每个字符触发一个函数,直到用户点击enter键或空格键


使用jQuery或普通JS怎么可能做到这一点?

如果您只想检测键入,您可以监听按键事件

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,则点击
,因此,如果点击
空格
回车
,则调用函数您的
-当按下此键时,函数将不会执行,直到您再次做出
anyHitYet=false

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

您可以使用:

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));

不确定上述答案是否符合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 )
看看这里和这里