【发布时间】:2012-06-15 13:57:00
【问题描述】:
我想在 Chrome 中捕捉 Ctrl+S,并阻止默认浏览器行为来保存页面。怎么样?
(只是发布问题和答案,因为我在此之后很长时间并没有找到解决方案)
【问题讨论】:
标签: javascript jquery google-chrome preventdefault
我想在 Chrome 中捕捉 Ctrl+S,并阻止默认浏览器行为来保存页面。怎么样?
(只是发布问题和答案,因为我在此之后很长时间并没有找到解决方案)
【问题讨论】:
标签: javascript jquery google-chrome preventdefault
据我所知,秘诀是 Ctrl+S 不会触发 keypress 事件,只会触发 keydown 事件。
$(document).bind('keydown', 'ctrl+s', function(e) {
e.preventDefault();
alert('Ctrl+S');
return false;
});
仅适用于 jQuery:
$(document).bind('keydown', function(e) {
if(e.ctrlKey && (e.which == 83)) {
e.preventDefault();
alert('Ctrl+S');
return false;
}
});
编辑 2012.12.17 - jQuery.hotkeys 说
如果您在输入元素内,则不会跟踪热键(除非您 显式地将热键直接绑定到输入)。这有助于避免 与普通用户输入冲突。
【讨论】:
keyup,这总是会首先触发保存对话框。总是选择keydown。
“借”自Overriding control+s (save functionality) in browser
document.addEventListener("keydown", function(e) {
if (e.key === 's' && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
e.preventDefault();
alert('captured');
}
}, false);
【讨论】:
keyCode 已弃用,现在使用 recommended 是 keyboardEvent.key === 's'...实际上,为什么我可以编辑时发表评论>:D
document.onkeydown = function (e) {
e = e || window.event;//Get event
if (e.ctrlKey) {
var c = e.which || e.keyCode;//Get key code
switch (c) {
case 83://Block Ctrl+S
e.preventDefault();
e.stopPropagation();
break;
}
}
};
【讨论】:
一站式解决数据问题
// disable right click
$(function() {
$(this).bind("contextmenu", function(e) {
e.preventDefault();
});
});
// Prevent F12
$(document).keydown(function (event) {
if (event.keyCode == 123) { // Prevent F12
return false;
} else if (event.ctrlKey && event.shiftKey && event.keyCode == 73) { // Prevent Ctrl+Shift+I
return false;
}
});
//stop copy of content
function killCopy(e){
return false
}
function reEnable(){
return true
}
document.onselectstart=new Function ("return false")
if (window.sidebar){
document.onmousedown=killCopy
document.onclick=reEnable
}
// prevent ctrl + s
$(document).bind('keydown', function(e) {
if(e.ctrlKey && (e.which == 83)) {
e.preventDefault();
return false;
}
});
【讨论】: