协调Firefox斜杠处理和密钥代码

时间:2012-01-20 21:39:00

标签: javascript jquery

我有一个网页,用户应该能够在任何地方输入并跟踪他们的输入。一个问题是firefox中的斜杠键“/”是打开搜索的快捷方式。这对我来说是不受欢迎的。我还没有找到一种方法来捕获搜索功能仍然将输入添加到我的跟踪中。我在keypress上将输入添加到堆栈。

keydown ... preventDefault在FireFox中效果最佳,但问题是在Chrome中keypress因某些原因无法触发(不确定为什么会preventDefault停止,但它确实)。如果我可以将自己的斜杠添加到输入堆栈,那就没问题了。但Firefox已经添加了它,因为keypress仍然被触发。 stopPropagation也不会阻止keypress在FireFox中触发。 <{1}}方法中的$(document).keypress(e)也没有做任何事情。

我遇到的另一个问题是“退格”应该从堆栈中删除,但我使用keydown添加到堆栈并将数据添加到用户可以看到的String.fromCharCode(e.which)字段。在Chrome中,这非常有效,但在FireFox中,它会添加一个代表退格的字符,然后立即将其删除,从而防止删除另一个字符。在输入中具有“退格”和“f5”等字符也是不合需要的。有没有办法判断input type="text"值是否对文本字段有效?我认为正在发生的事情是Chrome会自动执行此操作。

编辑:这可能会有所帮助,但FireFox显然会在fromCharCode之前触发keypress(Chrome会在我的网页上执行相反操作)。这很不寻常。

1 个答案:

答案 0 :(得分:1)

用一点点kludge解决了这个问题。我有一个noslash变量触发捕获斜杠:

else if (e.which == '191' && !noslash) {
   e.preventDefault();
   $typing.val($typing.val() + '/');
}

至于问题的第二部分,我只是拒绝

中的任何字符
[^-a-z0-9`~!@#$%^&*()_+=\\|/'";:,<.>?\[\]{}]