2014-01-11 92 views
1

我必须从html输入中禁用一些符号。 e.which在Firefox上无法正常工作。 Firefox禁用backspace等。 这里是JS Fiddle关键代码在Firefox上

var code = window.event ? event.keyCode : e.which; 

event.keyCode在Firefox的作​​品,但不与String.fromCharCode(code)工作。

回答

0

你已经在你的脚本有两个错误:

  1. 你叫事件参数event但提到e.which

2.您必须拨打evt.preventDefault()以防止键入的字符出现。
添加jQuery事件处理函数时,后一点是错误的。 '正常'DOM处理程序要求preventDefault(),另请参阅this comment


→ jsFiddle

$('#foo').keypress(function(evt) { 
    var code = window.event ? event.keyCode : evt.which; 
    var chr = String.fromCharCode(code); 
    if (".,".indexOf(chr) < 0) { 
     return false; 
    } 
}); 
+1

evt.preventDefault();等于返回false – Srw

+0

@Srw你是对的,至少在使用jQuery事件处理程序时。 – ComFreek

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; 
}); 

FIDDLE

要保持最活跃的钥匙,只是主要禁用的字符,你可以过滤这样

$('#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; 
}); 

FIDDLE

+0

Backspace仍然不工作在Firefox上 - 这是主要问题 – Srw

+1

@Srw - 你阻止了一切**但是**数字,逗号和句点,当然退格不起作用,如果你想让你的角色必须将其添加到白名单,我会更新答案。 – adeneo

+0

现在我需要箭头,删除和等。 ))什么是仅影响符号的通用解决方案? – Srw