使用jquery

时间:2016-02-17 10:10:13

标签: javascript jquery keyboard-shortcuts

我已经编写了一个代码块来阻止按键Ctrl + s它工作正常,并且在事件运行时已经发出警报,告诉我代码块已成功运行。稍后此代码块将被save命令替换。

但是我第一次按下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.$);
}

非常感谢任何帮助。

2 个答案:

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

答案 1 :(得分:1)

这篇帖子适合那些也遇到过这个问题的人,我现在已经解决了。我的原始代码块的问题是,一旦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.$);
}