2011-01-23 23 views
5

Tôi đang cố gắng nhúng một số keybindings trong webapp của tôi, và tôi đang gặp khó khăn với Opera. Tôi có mã này:Opera ngăn chặnDefault() trên sự kiện keydown

window.onkeydown = function(e){ 
    var key = e.keyCode ? e.keyCode : e.charCode ? e.charCode : false; 
    if (e.ctrlKey && key === 84) { 
    alert("foo"); 
    e.preventDefault(); 
    // return false; 
    } 
} 

Nó hoạt động như một nét duyên dáng trong Firefox và Chrome, nhưng Opera vẫn mở tab mới. Điều tương tự cũng xảy ra với return false;.

thông tin của tôi: Opera/9.80 (X11; Linux i686; U; en) Presto/2.7.62 Version/11.00

Trả lời

8

Opera doesn't supportpreventDefault trên keydown, chỉ có trên keypress.

Như bạn có thể thấy trong this example, bạn nên gắn một keypress xử lý riêng biệt cho Opera (phù hợp với tình hình của bạn):

var cancelKeypress = false; 

document.onkeydown = function(evt) { 
    evt = evt || window.event; 
    cancelKeypress = (evt.ctrlKey && evt.keyCode == 84); 
    if (cancelKeypress) { 
     return false; 
    } 
}; 

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

Cảm ơn vì đã giúp anh ta và xin lỗi về lỗi :-( – hallvors

+0

@hallvors: Bạn được chào đón, nhưng eh ... bạn xin lỗi về điều gì? Bạn làm việc cho Opera? –

+0

Vâng, tôi làm :). Đây là một trong những vấn đề phổ biến nhất mà đi lên các nhà phát triển web và cuối cùng chúng ta sẽ được liên kết với các trình duyệt khác trước khi phát hành lớn tiếp theo. – hallvors

Các vấn đề liên quan