$(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/