我必须从html输入中禁用一些符号。
e.which
在Firefox上无法正常运行。 Firefox禁用backspace
等。
这是JS Fiddle:
var code = window.event ? event.keyCode : e.which;
event.keyCode
适用于Firefox,但不适用于String.fromCharCode(code)
。
答案 0 :(得分:2)
jQuery规范化e.which
,因此您根本不必担心这一点
此外,只是听取正确的密钥代码要容易得多,没有理由将密钥代码转换为字符只是为了用indexOf
过滤掉它?
$('#foo').keydown(function(e) {
var code = e.which;
if (code == 8 || code == 13) return true; // backspace and enter
if (code < 48 || code > 57 || code == 188 || code == 190) return false;
});
为了保持大多数键处于活动状态,并且主要禁用字符,您可以像这样过滤
$('#foo').keydown(function(e) {
var key = e.which;
if (!e.shiftKey && !e.altKey && !e.ctrlKey &&
key >= 48 && key <= 57 || // numbers
key >= 96 && key <= 105 || // Numeric keypad
key == 190 || key == 188 || key == 109 || key == 110 || // comma, period and minus, . on keypad
key == 8 || key == 9 || key == 13 || // Backspace and Tab and EnterEnd
key == 35 || key == 36 || // Home and
key == 37 || key == 39 || // left and right arrows
key == 46 || key == 45) // Del and Ins
return true;
return false;
});
答案 1 :(得分:0)
您的脚本中有两个错误:
event
,但提到了e.which
。 2。您必须调用
evt.preventDefault()
以防止出现键入的字符。
添加jQuery事件处理程序时,后一点是错误的。 “正常”DOM处理程序需要preventDefault()
,另请参阅this comment。
$('#foo').keypress(function(evt) {
var code = window.event ? event.keyCode : evt.which;
var chr = String.fromCharCode(code);
if ("0123456789.,".indexOf(chr) < 0) {
return false;
}
});