使用 jquery 捕获按键

Trap keypress using jquery

本文关键字:jquery 使用      更新时间:2023-09-26

我已经编写了一个代码块来捕获按键Ctrl + s它工作,并且在事件运行时发出警报,向我显示代码块已成功运行。 稍后,此代码块将被保存命令替换。

但是我遇到了一些麻烦,因为第一次按下Ctrl + s它可以工作,但是每次之后s按钮单独触发事件

这是代码块:

var isCtrl = false;
ck.on('contentDom', function (evt) {
    ck.document.on('keyup', function (event) {
        if (event.data.$.keyCode === 17) isCtrl = false;
    });
    ck.document.on('keydown', function (event) {
        if (event.data.$.keyCode === 17) isCtrl = true;
        if (event.data.$.keyCode === 83 && isCtrl === true) {
    //The preventDefault() call prevents the browser's save popup to appear.
   //The try statement fixes a weird IE error.
            try {
                event.data.$.preventDefault();
            } catch (err) { }
            alert('ctrl-s');
            return false;
        }
    });
}, ck.element.$);
}

任何帮助将不胜感激。

这篇文章适用于任何也遇到此问题的人,我现在已经解决了。我的原始代码块的问题在于,一旦isCtrl设置为真,它就保持为真。这意味着当再次检查它是否被按下时,它是否再次按下并不重要,因为它已经设置为 true。在那里,我添加了一行,以便在条件语句运行时将其更改回 false。

下面是新的代码块:

    var isCtrl = false;
    ck.on('contentDom', function (evt) {
        ck.document.on('keyup', function (event) {
            if (event.data.$.keyCode === 17) isCtrl = false;
        });
        ck.document.on('keydown', function (event) {
            if (event.data.$.keyCode == 17) isCtrl = true;
            if (event.data.$.keyCode == 83 && isCtrl === true) {
                //The preventDefault() call prevents the browser's save popup to appear.
                //The try statement fixes a weird IE error.
                try {
                    event.data.$.preventDefault();
                } catch (err) { }
                alert('ctrl-s');
                isCtrl = false;
                return false;
            }
        });
    }, ck.element.$);
}

这是一种在jquery中执行ctrl + s命令的方法,每次都有效:

$(window).keypress(function(event) {
    if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true;
    alert("Ctrl-S pressed");
    event.preventDefault();
    return false;
});