javascript - 使用在 Safari 中不起作用的 javascript 禁用键盘快捷键?

标签 javascript safari cross-browser keyboard-shortcuts

我尝试使用 javascript 禁用 cmd+rcmd+l 快捷方式,它在除 safari 之外的所有浏览器中工作正常。

请查看jsfiddle .

var isMacOS = navigator.userAgent.toLowerCase().indexOf("mac") != -1;
$("input, textarea").on('keydown',function(ev){
    checkKeyBoardEvents(ev, true);
}).on('keyup',function(ev){
    checkKeyBoardEvents(ev);
}).on('keypress',function(ev){
    checkKeyBoardEvents(ev);
});
function checkKeyBoardEvents(ev, printChar){
    var keyCode = ev.keyCode;
    var charCode = String.fromCharCode(keyCode);
    if((isMacOS && ev.metaKey) || ev.ctrlKey){
        $("#keyLogs").append("<p>You pressed "+ (ev.ctrlKey ? "ctrl":"cmd")+"+"+charCode); 
    }
    if(((isMacOS && ev.metaKey) || (!isMacOS && ev.ctrlKey)) && (keyCode === 76 || keyCode === 82)){
        if(printChar){
        var currentValue = $(ev.target).val();
        $(ev.target).val(currentValue + (currentValue.length ? ". " : "") +"You pressed cmd+"+charCode+". " );
    }
    ev.preventDefault();
    ev.stopPropagation();
    }
}

最佳答案

高级系统事件,例如CMD+F - 表示在页面上搜索,在文档或窗口上冒泡。 但!您不能在 Safari 中覆盖 CTRL+R、CTRL+W 或 CMD 事件。

防止用户刷新页面的更好方法是 window.onbeforeunload = 函数(事件){}

您需要使用事件的捕获阶段来处理和防止它出现默认行为。

例如

function preventFn(event) {
    if (event.keyCode === YOU_KEY_CODE && event.metaKey) {
        event.preventDefault();
        event.stopPropagation();
    }
}
document.addEventListener('keydown', preventFn, true); // true means use capture phase of event

例如,您可以使用外部库来组织您的快捷方式,您的代码会更好、更干净。

hotkeys - 流行

stack-shortcuts - 小

关于javascript - 使用在 Safari 中不起作用的 javascript 禁用键盘快捷键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37371508/

相关文章:

javascript - XMLHttpRequest open() 在 Chrome 中失败

javascript - jquery 中按 Enter 键时提交表单

javascript - jQuery UI 自动完成功能只能运行一次

javascript - 如何检测文本区域上箭头键的按下事件?

cookies - Safari 不设置 Cookie,但 IE/FF 设置

javascript - jQuery-bootgrid 无法将 html 表转换为 bootgrid

css - 为什么我的 Flexbox 粘性页脚在 Safari 中不起作用?

php - 使用 iframe 将第三方 cookie 设置到 safari。不支持 P3p header

javascript - 创建 CSV 并使用 JS 打开,在 IE、Chrome 中不起作用

html - 某些内容不会在 IE 中显示?