Javascript Firefox中奇怪的CTRL键检测

Javascript Firefox中奇怪的CTRL键检测,javascript,jquery,firefox,Javascript,Jquery,Firefox,我的一个页面上有一个输入,该页面上有侦听器,可以对输入的值执行格式化 该字段仅允许某些输入(数字以及某些其他字符),这些输入由按键和按键侦听器控制。按键可以防止非法输入,并且keyup可以执行格式化(还可以检查输入,以防用户将内容粘贴到字段中而不是键入内容) 它在Chrome和IE中工作得很好(回到IE8,我之前不关心任何事情),但在Firefox中,我无法使用tab键、箭头键和backspace,也无法使用ctrl+c/v复制或粘贴 经过调查,我发现问题出在这位听众身上: $(此)。按键(功能

我的一个页面上有一个输入,该页面上有侦听器,可以对输入的值执行格式化

该字段仅允许某些输入(数字以及某些其他字符),这些输入由按键和按键侦听器控制。按键可以防止非法输入,并且keyup可以执行格式化(还可以检查输入,以防用户将内容粘贴到字段中而不是键入内容)

它在Chrome和IE中工作得很好(回到IE8,我之前不关心任何事情),但在Firefox中,我无法使用tab键、箭头键和backspace,也无法使用ctrl+c/v复制或粘贴

经过调查,我发现问题出在这位听众身上:

$(此)。按键(功能(e)
{
按键(e);
});

在IE和Chrome中,tab键、箭头键和backspace键甚至不会触发监听器,而v键和c键在与ctrl键一起使用时也不会触发监听器。然而,在FF中,它会拾取所有按键,从而导致
consumerillegalfloatkeypress(e)
接到电话,发现按键是非法的

修复非常简单-我有一系列合法输入,用于检查应该允许的内容,因此我只添加了v和c的字符码,并为
ctrlKey
输入了一个键

我感到困惑的是,为什么在不同的浏览器中处理这些问题会有所不同?我认为,因为它都是javascript,所以它可以在所有浏览器中处理相同的CTRL键


如果有人对此有任何信息,或者知道我可以在哪里读到更多的信息,我将非常感兴趣和感激

请尝试此解决方案:

$(document).on("keypress", this, function (e) {
    var keycode = (e.keyCode ? e.keyCode : e.which);
    /* Example */
    if (keycode === 27) {
         alert("Escape key");
    }
});
…您可以启用或禁用所需的密钥

我将给你一个我的函数:

功能:

$.fn.pKey = function (key, callback) {
    var key=key;
    return this.each(function () {
        $(document).on("keypress", this, function (e) {
            var keycode = (e.keyCode ? e.keyCode : e.which);
            if (keycode === key) {
                callback.call(this, e);
            };
        });
    });
};
$("#my-div").pKey(17,function (e) {
    /* disable CTRL*/
    e.preventDefault();
})
示例:

$.fn.pKey = function (key, callback) {
    var key=key;
    return this.each(function () {
        $(document).on("keypress", this, function (e) {
            var keycode = (e.keyCode ? e.keyCode : e.which);
            if (keycode === key) {
                callback.call(this, e);
            };
        });
    });
};
$("#my-div").pKey(17,function (e) {
    /* disable CTRL*/
    e.preventDefault();
})

让我们看看官方文件:

这里可以阅读2条重要信息:

注意:由于任何官方规范都没有涵盖keypress事件,因此使用它时遇到的实际行为可能因浏览器、浏览器版本和平台而异

以及:

此方法是前两个变体中.on(“keypress”,handler)和第三个变体中.trigger(“keypress”)的快捷方式

让我们看看Javascript文档中关于keypress的内容:

点击几下后,我们在屏幕上看到一张漂亮的桌子

该表显示了哪些浏览器接受某些键,如不可打印键(箭头键、控件、向下翻页等),哪些浏览器不接受


你问题的最终答案是:如果某件事(比如按键事件)没有既定的标准,那么浏览器会做任何他们想做的事情。对于Google chrome来说,这意味着它允许
CTRL+V
,Mozilla Firefox可以对其进行过滤。

尝试下面的解决方案。这非常适合我的问题

功能捕获按键(e){
var-keycode=(e.keycode?e.keycode:e.which);
var ctrlKeyPressed=e.ctrlKey;
var-key=e.which;
开关(电子钥匙){
案例“c”://右箭头键
如果(!ctrlKeyPressed){
警报(“按下C”);
}
打破
}
}

window.addEventListener(“按键”,captureKeyPress)谢谢你的回答。对于这个问题,我已经有了一个很好的解决方案。我的问题是,是否有人真的知道发生这种情况的确切原因:)您能为您的代码提供更好的示例吗?有时
文档
窗口
会出现问题,我需要看看您如何在函数中定义
。谢谢不用担心,请参阅下面的公认答案-我不是在寻找解决方案,只是代码在不同浏览器中工作方式不同的原因。谢谢,更感谢您提供您的源代码,这正是我要寻找的!