javascript - control + s,返回 false 但仍调用另一个函数

标签 javascript jquery keyboard-shortcuts

$(document).keydown(function (e) {
    if (e.keyCode == 83 && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
        function_which_does_a_lot_including_ajax_calls();
        return false;
    }
});

我正在尝试调用 control+S 上的方法,并且对 function_which_does_a_lot_include_ajax_calls() 的调用会阻止代码到达及时“return false”,即浏览器默认提示“是否保存此网站”窗口。

如果我将其更改为简单:

$(document).keydown(function (e) {
    if (e.keyCode == 83 && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
        // function_which_does_a_lot_including_ajax_calls();
        return false;
    }
});

...触发return false,没有任何反应(无默认提示)。

有没有办法我可以做很多事情,但仍然返回 false,以便浏览器不执行其默认行为?谢谢!

最佳答案

使用 e.preventDefault() 阻止浏览器的默认行为(类似于 return false)。

示例:

$(document).keydown(function (e) {
    if (condition_says_NO_to_default) {
        e.preventDefault();
        .... //Rest of code

更新:替代方法。下面的代码维护作用域、this 和事件对象引用,同时首先处理 return false 语句:

$(document).keydown(function (e) {
    var $this = this; //Save reference for later
    setTimeout(function(){
        (function(event){
            //Your code here
        }).call($this, e);
    }, 1); // An extremely low timeout.
    return false;
});

关于javascript - control + s,返回 false 但仍调用另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8037960/

相关文章:

javascript - 如何在javascript中生成螺旋矩阵?

javascript - 无法在Vue中设置下拉列表中的默认选定项

javascript - 如何根据元素中的字符数在延迟后隐藏元素

javascript - 为什么 onclick = function() 在文档就绪中不起作用?

python - TIS/TSM非主线程错误;由热键触发的 pygame 脚本 (rumps, pygame, keyboard)

keyboard-shortcuts - 用 sublime text 注释掉代码块的快捷方式

javascript - 为什么我的 Canvas 只加载左上角的图像?

javascript - JS 文件未加载到 html 中

javascript - 从表单中获取值并插入到span中

typescript - 禁用 Youtube 快捷方式或其他解决方法