我有一个输入框,我只想允许字母,连字符,空格和退格。一切都很好的铬,但Firefox退格(或charcode 8)不起作用。 - https://jsfiddle.net/npo7y7fr/
$(document).ready(function () {
$('.textInput').keypress(function (key) {
if ((key.charCode < 97 || key.charCode > 122) && (key.charCode < 65 || key.charCode > 90) && (key.charCode != 45)) return false;
});
});
我尝试添加&& (key.charCode != 8)
也将更改按键更改为“keydown,keyup”等其他人...
任何人都可以使用Firefox(40.0.3)或者我可以使用的东西吗?
答案 0 :(得分:3)
由于Space会发送密钥32,退格会在Mozilla中发送0,这就是为什么它不能在mozilla中运行。
更改您的脚本如下
$(document).ready(function () {
$('.textInput').keypress(function (key) {
if ((key.charCode < 97 || key.charCode > 122) && (key.charCode < 65 || key.charCode > 90) && (key.charCode != 45) && (key.charCode != 32) && (key.charCode != 0) ) return false;
});
});
希望这会有所帮助.. !!
答案 1 :(得分:2)
不要对某些特殊键进行硬编码,只需跳过所有特殊键的过滤即可。使用已接受的解决方案,您仍然可以取消箭头键,Home,End等,这对用户来说是一件坏事。
由于所有特殊键的key
字段都超过1个字符,因此您可以安全地执行此操作:
$(document).ready(function () {
$('.textInput').keypress(function (event) {
return event.key.length > 1 || event.ctrlKey || !!event.key.match(/[a-zA-Z \-]/);
});
});
如果是特殊键,则按下该键,同时按下Ctrl键(允许复制和粘贴)或者如果它与正则表达式(字母,空格和连字符)匹配
由于用户可以粘贴无效内容,您仍应使用oninput
事件删除非法字符(可能类似于ctrl.value.replace(/[^a-zA-Z \-]+/g, '')
)。
答案 2 :(得分:1)
不是试图控制浏览器输入的内容,而是可以更容易地在keyup上过滤文本框的内容。
请考虑以下事项:
$('.textInput').keyup(function() {
$(this).val( $(this).val().replace(/[^a-zA-Z]/,''));
});
希望这有帮助。