$(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,以便浏览器不执行其默认行为?谢谢!
我不确定我理解你所描述的行为,但你可以尝试这样的事情:
$(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;
}
});
使用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;
});