我的页面之一上有一个输入,上面有侦听器,这些输入对输入的值执行格式化。

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

它在Chrome和IE(回到IE8,我之前不关心任何东西)中都可以正常工作,但是在Firefox中,我无法使用Tab键,箭头键,退格键,并且无法使用ctrl + c复制或粘贴/ v

经过一番调查,我发现问题出在这个监听器上:

$(this).keypress(function(e){ consumeIllegalFloatKeyPress(e);});

在IE和Chrome中,与ctrl键一起使用时,选项卡,箭头和退格键之类的键甚至都不会触发侦听器,而v和c之类的按键也不会触发它。但是,在FF中,它会拾取所有按键,从而导致
consumeIllegalFloatKeyPress(e);
被呼叫,并发现按键是非法的。

修复非常容易-我有一系列合法的输入,用于检查应允许的内容,因此我只添加了v和c的charCode,并为ctrlKey输入了密钥。

我感到困惑的是为什么在不同的浏览器中对它们的处理方式不同?我以为,因为它全部是JavaScript,所以它将在所有浏览器中以相同的方式处理CTRL键。

如果有人对此有任何信息,或者知道我可以在其他地方阅读更多信息,我将非常有兴趣和感激!

最佳答案

让我们看一下官方文档:

jQuery keypress listener

这里有2个重要的内容:


  注意:由于keypress事件未包含在任何官方规范中,因此使用它时遇到的实际行为可能会因浏览器,浏览器版本和平台而异。


和:


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


让我们看一下Javascript文档中有关按键的内容:

javascript keypress event

单击几下后,我们在this page上看到一个漂亮的表格

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

您的问题的最终答案是:如果没有某种标准(例如keypress事件),则浏览器将按照自己的意愿进行操作。对于Google chrome,这意味着它允许CTRL + V,而Mozilla Firefox会对其进行过滤。

关于javascript - Firefox中奇怪的CTRL键检测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30343173/

10-12 12:27