【问题标题】:Trap keypress using jquery使用 jquery 捕获按键
【发布时间】:2016-05-28 23:24:04
【问题描述】:

我已经编写了一个代码块来捕获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.$);
}

非常感谢任何帮助。

【问题讨论】:

    标签: javascript jquery keyboard-shortcuts


    【解决方案1】:

    这是在 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;
    });
    

    【讨论】:

    • 感谢您的回答。有什么方法可以查看原始代码并帮助我找出问题所在?
    • 可以为您的代码@NafisRahman 制作 JSFiddle 吗?
    • 不抱歉,它在我公司开发的 CMS 平台上,它使用 ckeditor 作为文本编辑器,这是我一直在搞乱的代码以使捷径工作
    • 我在 ckeditor 初始化后直接在我的问题中添加了代码,我知道 ckeditor 有自己的热键功能,但我的老板希望我以这种方式而不是 ckeditors 方式添加功能
    【解决方案2】:

    这篇文章是为那些也遇到过这个问题的人准备的,我现在已经解决了。我的原始代码块的问题是,一旦将 isCtrl 设置为 true,它仍然是 true。这意味着当再次检查它是否被按下时,是否再次按下并不重要,因为它已经设置为 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.$);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 2018-09-17
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多