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

问题描述 投票:0回答:2
$(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;
    }
});

我正在尝试在控件+ S上调用一个方法,并且调用function_which_does_a_lot_including_ajax_calls()会阻止代码及时到达“返回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;
    }
});

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

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

javascript jquery keyboard-shortcuts
2个回答
1
投票

我不确定我理解你所描述的行为,但你可以尝试这样的事情:

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

3
投票

使用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;
});
© www.soinside.com 2019 - 2024. All rights reserved.