2010-06-14 52 views

Trả lời

12

Nếu bạn chỉ quan tâm đến các khóa ví dụ mà bạn đã đề cập, sự kiện keydown sẽ làm, ngoại trừ các phiên bản Opera cũ hơn, trước Blink (tối đa và bao gồm phiên bản 12, ít nhất) bạn sẽ cần hủy sự kiện keypress. Việc xác định đáng tin cậy các khóa không thể in được dễ dàng hơn trong sự kiện keydown hơn sự kiện keypress, vì vậy sau đây sử dụng biến để đặt trong trình xử lý keydown để thông báo cho trình xử lý keypress có hay không chặn hoạt động mặc định.

var cancelKeypress = false; 

document.onkeydown = function(evt) { 
    evt = evt || window.event; 
    cancelKeypress = /^(13|32|37|38|39|40)$/.test("" + evt.keyCode); 
    if (cancelKeypress) { 
     return false; 
    } 
}; 

/* For Opera */ 
document.onkeypress = function(evt) { 
    if (cancelKeypress) { 
     return false; 
    } 
}; 
+5

+1, tôi đã xóa câu trả lời của tôi để ủng hộ vấn đề này, tôi đã không biết về các vấn đề của Opera :-) –

+0

Opera quirk vẫn tồn tại những ngày và giờ? Bạn vẫn cần phải hủy trong nhấn phím? –

+1

@RobertKoritnik: Tôi vừa thử nó và nó không áp dụng cho phiên bản Opera mới nhất. Tôi đoán nó không áp dụng cho bất kỳ phiên bản Opera nào dựa trên Blink. –

5

Bắt sự kiện keydown và trả về false. Nó phải ở trong dòng:

<script> 
document.onkeydown = function(e){ 
    var n = (window.Event) ? e.which : e.keyCode; 
    if(n==38 || n==40) return false; 
} 
</script> 

(seen here)

Các mã phím được định nghĩa here

chỉnh sửa: cập nhật câu trả lời của tôi để làm việc trong IE

+1

'window.captureEvents' đã lỗi thời và đã bị xóa khỏi các phiên bản Firefox mới hơn và không bao giờ được hỗ trợ bởi một số trình duyệt khác. Xem https://developer.mozilla.org/en/DOM/window.captureEvents. –

+0

Điều này sẽ không hoạt động trong IE, trong đó 'e' sẽ không được xác định. –

+0

@andy, @tim: đúng, tôi đã sao chép và dán một cách mù quáng. Tôi đã sửa lại câu trả lời của mình. Tất nhiên bây giờ @ tim của câu trả lời là nhanh nhất và chính xác hơn – marcgg

0

jQuery có một tốt đẹp KeyPress function mà cho phép bạn phát hiện một phím bấm, sau đó nó chỉ là một trường hợp phát hiện keyvalue và thực hiện một nếu cho những người bạn muốn bỏ qua.

chỉnh sửa: ví dụ:

$('#target').keypress(function(event) { 
    if (event.keyCode == '13') { 
    return false; // or event.preventDefault(); 
    } 
}); 
+0

ông apaprently không sử dụng jquery dựa trên các thẻ ông đặt – marcgg

+0

tôi không có một vấn đề với việc sử dụng jquery bên cạnh đó tôi đang sử dụng ASP.NET – Jack

+0

Làm thế nào tôi có thể làm điều đó . ?! – Jack

0

Chỉ cần trả về false. Cẩn thận rằng trên Opera này không hoạt động. Bạn có thể muốn sử dụng onkeyup thay thế và kiểm tra ký tự được nhập cuối cùng và xử lý nó. Hoặc sử dụng tốt hơn JQuery KeyPress

0

Đây chắc chắn là chủ đề rất cũ. Để làm được điều kỳ diệu với IE10 và FireFox 29.0.1 bạn chắc chắn phải làm bên này keypress (không keydown) chức năng nghe sự kiện:

if (e.preventDefault) e.preventDefault(); 
1

tôi chỉ phát triển cho IE vì tác phẩm của tôi đòi hỏi nó, do đó là mã của tôi cho trường số, không phải là một vẻ đẹp nhưng hoạt động tốt

$(document).ready(function() { 

    $("input[class='numeric-field']").keydown(function (e) { 

     if (e.shiftKey == 1) { 
      return false 
     } 

     var code = e.which; 
     var key; 

     key = String.fromCharCode(code); 

     //Keyboard numbers 
     if (code >= 48 && code <= 57) { 
      return key; 
     } //Keypad numbers 
     else if (code >= 96 && code <= 105) { 
      return key 
     } //Negative sign 
     else if (code == 189 || code == 109) { 
      var inputID = this.id; 
      var position = document.getElementById(inputID).selectionStart 
      if (position == 0) { 
       return key 
      } 
      else { 
       e.preventDefault() 
      } 
     }// Decimal point 
     else if (code == 110 || code == 190) { 
      var inputID = this.id; 
      var position = document.getElementById(inputID).selectionStart 

      if (position == 0) { 
       e.preventDefault() 
      } 
      else { 
       return key; 
      } 
     }// 37 (Left Arrow), 39 (Right Arrow), 8 (Backspace) , 46 (Delete), 36 (Home), 35 (End) 
     else if (code == 37 || code == 39 || code == 8 || code == 46 || code == 35 || code == 36) { 
      return key 
     } 
     else { 
      e.preventDefault() 
     } 
    }); 

}); 
+0

Upps, lãng phí này không phải là lĩnh vực số blog, xin lỗi –