2014-01-11 5 views
1

html 입력에서 일부 기호를 비활성화해야합니다. e.which이 (가) Firefox에서 제대로 작동하지 않습니다. Firefox는 backspace 및 요법을 비활성화합니다. 파이어 폭스에키 코드 - Firefox

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

event.keyCode 작동하지만 String.fromCharCode(code) 작동하지 않습니다 : 여기 는 JS Fiddle입니다.

답변

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

백 스페이스 여전히 파이어 폭스에서 작동하지 않습니다. - 주된 문제입니다. – Srw

+1

@Srw - 모든 것을 차단하고 있습니다. ** 그러나 숫자, 쉼표 및 마침표는 물론 백 스페이스가 작동하지 않습니다. 허용 목록에 추가해야합니다. 답변을 업데이트하겠습니다. – adeneo

+0

지금 나는 화살, 델과 요법이 필요해.)) 기호에만 영향을주는 일반적인 해결책은 무엇입니까? – Srw