如何在firefox中重写Ctrl + N以启动AJAX
How to override Ctrl + N in firefox to launch AJAX
注意: Juan Mendes的回答是被选中的答案,因为它对我的情况有最有用的回应。尽管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
您的代码没有阻止默认行为
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
,你会看到处理程序永远不会得到。因此,Chrome甚至不让你看到CTRL+N
的组合,你不能做任何事情。就像Windows应用程序不会收到CTRL+ALT+DEL
的通知
如果应用程序必须为多个浏览器工作,我的建议是使用不同的组合,如ALT+SHIFT+N
,你真的不想接管基本的浏览器快捷方式
我相信你的问题是,你正在检查一个按键和执行你的行动太迟后,keyup。如果你改变你的代码绑定到Ctrl+N的键下,我认为你将能够得到所需的结果。比如:
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键,这是keycode 17。然后,我在第二个keydown上捕获键码78,这是n。先前e.p preventdefault()不足以阻止新窗口,所以我必须为e.p stoppropagation (), e.p stopimmediatepropagation()和console.log(e)添加额外的行可以删除。正如Juan M所提到的,其他的不再需要了,所以我已经更新了代码,不包括它们。
注意: Firefox更改了键等待优先级。它曾经是系统>网站>火狐,但似乎人们抱怨网站劫持快捷键,所以优先级改为系统>火狐>网站,这意味着即使你的网站绑定了Ctrl+N,火狐的优先级为一个新的窗口接管。
- 从控制器返回后Ajax启动事件激发
- Rails jquery ajax调用未启动
- 从Django中同一页面上的多个按钮启动AJAX请求
- 启动选项卡ajax在加载页面时加载内容
- jQuery$.ajax完成回调而未启动
- 使用PrimeFaces<p: ajax>,只在更改字段的键击时在inputText中启动Ajax
- 通过使用onblur启动Ajax查询到PHP MySQL DB
- TineMCE 不会启动 ajax 加载的文本区域
- 如果另一个仍在运行,请立即启动 ajax 调用
- 浏览器是立即启动AJAX调用,还是等待当前操作完成
- 非异步启动AJAX请求的替代方法
- 启动ajax服务器脚本并轮询完整性
- 如何在ajax运行时禁用click功能,相同的click启动ajax运行,在ajax完成后,重新启用click功能
- 如何在firefox中重写Ctrl + N以启动AJAX
- 立即启动AJAX请求,但在添加元素之前确保页面已经加载
- MVC DropDownList选择已更改,未启动Ajax
- 可以在表单提交后启动ajax调用吗
- 无法在IE9中的dom上启动ajax
- Internet Explorer启动AJAX调用延迟
- 用jquery重新启动ajax对象