5

注意:胡安门德斯的答案是选定的答案,因为它对我的情况最有用。虽然 AxGryndr 也有一些有用的信息。阅读两个答案,它们都适用于不同的情况。谢谢你们俩的帮助。

我已经在这里问了一个类似的问题,它确实解决了我问题的第一部分,现在我有了另一个问题。我希望 Ctrl + N 启动一个包含 AJAX 的脚本,但是一旦我运行 .get 函数,它就会导致默认启动。有谁知道解决这个问题。

这个小提琴有一些代码可以显示我的问题。这是一些代码。

function checkkey(e)
{
    if(e.ctrlKey && e.keyCode == 'N'.charCodeAt(0) && !e.shiftKey && !e.altKey)
    {
        try{e.preventDefault();}catch(ex){}
        var m_objXMLHttpReqObj = new XMLHttpRequest();
        m_objXMLHttpReqObj.open("GET", "", false);
        m_objXMLHttpReqObj.send();
    }
}

JSFIDDLE

4

2 回答 2

5

您的代码没有阻止默认行为

function checkkey(e) {
    if(e.ctrlKey && e.keyCode == 'N'.charCodeAt(0) && !e.shiftKey && !e.altKey) {
        e.preventDefault();
        // Now send your AJAX

AJAX 似乎也干扰了停止默认行为的能力。你试图发送一个同步的 AJAX 请求(永远不要这样做,它会停止浏览器)并且你没有给它一个 URL 去(触发一个错误)。只要您更改设置以正确地为其提供 URL 并使其异步,它就可以在 FF 中工作。

这是工作代码

function checkkey(e) {
    if(e.ctrlKey && e.keyCode == 'N'.charCodeAt(0) && !e.shiftKey && !e.altKey){
        e.preventDefault();
        var m_objXMLHttpReqObj = new XMLHttpRequest();
        m_objXMLHttpReqObj.open("GET", 
                // URL to go to
                "/echo/html/", 
                // Asynchronous
                true);
        m_objXMLHttpReqObj.send("");
    }
}

但是,在 Chrome 中(它可能对您没有用,但对阅读此答案的其他人),如果您console.log 在处理程序的顶部添加 a ,您会看到处理程序永远不会得到。因此,Chrome 甚至不会让您看到CTRL+N组合,您也无能为力。就像 Windows 应用程序不会收到通知一样CTRL+ALT+DEL

如果应用程序必须适用于多个浏览器,我的建议是使用不同的组合,例如ALT+SHIFT+N,您真的不想接管基本的浏览器快捷方式。

于 2013-04-15T19:12:39.697 回答
1

我相信您的问题是您正在检查按键并在按键后执行您的操作为时已晚。如果您更改代码以绑定到 Ctrl+NI 的 keydown,则认为您将能够获得所需的结果。就像是:

var pKey
$(function() {
$(window).keydown(function(e) {
    if(e.which == 17) {
        pKey = e.keyCode;
    }
    else {
        if(pKey == 17 && e.keyCode == 78) {
            e.preventDefault();
            console.log(e);
        }
    }
});
});

我添加了全局变量来捕获 Ctrl 键按下,即键码 17。然后我在第二个键按下键上捕获键码 78,即 N。之前的 e.preventDefault() 不足以阻止新窗口,所以我不得不添加可以删除 e.stopPropagation()、e.stopImmediatePropagation() 和 console.log(e) 的额外行。正如 Juan M 提到的,不再需要其他的,所以我更新了代码以不包括它们。

注意: Firefox 更改了关键出价优先级。它曾经是 System>Website>Firefox 但是似乎人们在抱怨网站劫持了快捷方式,因此优先级已更改为 System>Firefox>Website 这意味着即使您的网站绑定了 Ctrl+N Firefox 的优先级以获得新的windows 接管。

于 2013-04-15T17:49:28.153 回答