2009-02-16 15 views

Trả lời

16

Trong FF/Mozilla sự kiện được chuyển đến trình xử lý sự kiện của bạn làm thông số. Sử dụng một cái gì đó như sau để có được xung quanh đối số sự kiện mất tích trong IE.

function onlyNumeric(e) 
{ 
    if (!e) { 
     e = window.event; 
    } 

    ... 
} 

Bạn sẽ thấy rằng có một số khác biệt khác giữa hai loại này. Điều này link có một số thông tin về cách phát hiện phím nào được nhấn theo cách của trình duyệt chéo.

+2

Tuổi vấn đề cũ .. tuổi giải pháp cũ ... Wonder khi chúng tôi sẽ vượt qua các cuộc chiến tranh Browser! ;-) – Cerebrus

2

Hoặc khá đơn giản, đặt tên cho thông số sự kiện và nó sẽ hoạt động trên tất cả các trình duyệt. Dưới đây là một ví dụ jQueryish:

$('#' + _aYearBindFlds[i]).on('keyup', function(event) { 
    if(! ignoreKey({szKeyCodeList: gvk_kcToIgnore, nKeyCode: event.keyCode })) this.value = this.value.replace(/\D/g, ''); 
    }); 

Ví dụ này cho phép chữ số duy nhất được nhập cho các lĩnh vực năm (bên trong một cho mỗi bộ chọn loop), nơi ingoreKey() có một danh sách keyCode/mảng và so sánh keyCode sự kiện và xác định nếu nó phải được bỏ qua trước khi kích hoạt sự kiện liên kết.

Phím tôi thường nhập cho mặt nạ/khác là mũi tên, phím xóa lùi, tab, tùy thuộc vào ngữ cảnh/hành vi mong muốn. Bạn cũng có thể sử dụng event.which thay vì event.keyCode trong hầu hết các trình duyệt, ít nhất là khi bạn đang sử dụng jQuery phụ thuộc vào event.which để chuẩn hóa các sự kiện quan trọng và chuột.

Tôi không biết chắc chắn điều gì xảy ra dưới vỏ bọc trong động cơ js, nhưng dường như Mozilla FF tôn trọng phạm vi nghiêm ngặt hơn, trong đó, các trình duyệt khác có thể tự động giải quyết phạm vi window.event.keyCode sở hữu khi sự kiện không được chuyển giao một cách rõ ràng vào một chức năng hoặc đóng cửa.

Trong FF, bạn cũng có thể giải quyết sự kiện theo số window.event (như được minh họa trong một số ví dụ tại đây) sẽ hỗ trợ tư tưởng này.

0

Một số trình duyệt có thể không hỗ trợ keyCode bạn phải sử dụng keyChar

function onlyNumeric() { 
    var chars = event.keyCode | event.keyChar; 
    if (chars < 48 || chars > 57) { 
     event.returnValue = false; 
    } 

} 

onkeypress=onlyNumneric();