我想立刻捕获多个关键事件

时间:2015-07-20 12:54:24

标签: javascript jquery

<!DOCTYPE html>
<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    </head>
    <body>
        <textarea id="txtarea"></textarea>
        <script>
            var map = [];
            $('#txtarea').onkeydown = $('#txtarea').onkeyup = function(e){
                e = e || event; // to deal with IE
                map[e.keyCode] = e.type == 'keydown';
                if(map[13] && map[16])
                    alert("Its Working!!");
                else
                    alert("Its not working !!");
            }
        </script>
    </body>
</html>

我想一次捕获多个鼠标事件。这里有错误。如果有更好的方法,请告诉我。提前致谢。

4 个答案:

答案 0 :(得分:1)

您无法一次捕获多个事件,在任何给定时刻只会触发一个事件而JavaScript不会执行线程化。

看起来您实际上是在尝试同时定义多个事件处理程序,但您的语法错误。

jQuery不支持onkeydown等属性。

您需要使用on方法。

events参数是一个包含空格分隔的事件列表的字符串。

$('#txtarea').on("keydown keyup", yourFuntion);
e = e || event; // to deal with IE

不要那样做。 jQuery规范化事件处理程序。

答案 1 :(得分:1)

如果你改变了

$('#txtarea').onkeydown = $('#txtarea').onkeyup = function(e){
            e = e || event; // to deal with IE
            map[e.keyCode] = e.type == 'keydown';
            if(map[13] && map[16])
                alert("Its Working!!");
            else
                alert("Its not working !!");
        }

$('#txtarea').bind("keyup keydown", function(e){
    if(e.keyCode === 13] || e.keyCode === 16) {
        alert("Its Working!!");
    } else {
        alert("Its not working !!");
    }
});

然后它应该适用于任何一个事件。

答案 2 :(得分:0)

如果您使用.on(),则可以通过用空格分隔来绑定多个事件。

$('#txtarea').on('keyup keydown', function (e){
  // (fires for both keyup and keydown events)
  // console.log(e) 
});

答案 3 :(得分:0)

根据我们上面的讨论,您尝试在按下Shift-Enter时触发操作。您可以将上面的代码减少到以下内容:

$('#txtarea').on(
    'keydown',
    function (e) {
        if (e.shiftKey && e.keyCode === 13) {
            // Shift-Enter has been pressed!
        }
    }
);