$(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_including_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;
}
});
...触发返回false,没有任何反应(没有默认提示)。
有没有办法可以做很多事情,但仍然返回false,以便浏览器不会执行默认行为?谢谢!
答案 0 :(得分: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;
});
答案 1 :(得分: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;
}
});