2014-01-11 32 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