2010-04-22 25 views
5

Tôi đã nhận thấy sự cố khi cố gắng bắt phím tắt: CTRL + mũi tên.Làm cách nào để xử lý ctrl + mũi tên trong Javascript?

Tôi đã xử lý sự kiện nhấn phím. Bây giờ, khi tôi giữ phím CTRL thì sự kiện nhấn phím sẽ được kích hoạt một lần. Nếu tôi giữ mũi tên (để bây giờ tôi đang giữ CTRL + mũi tên), nó sẽ không kích hoạt một sự kiện khác. Nó có bị cấm vì lý do nào không? Tôi đoán tôi đã gặp phải vấn đề này trong Opera vài năm trước và có một tùy chọn cho nó trong trình duyệt.

kết quả của tôi:

  • giữ CTRL, bấm mũi tên - sự kiện cháy cho CTRL và không cháy, một sự kiện cho một mũi tên

  • báo chí CTRL + một mũi tên cùng một lúc - kích hoạt một sự kiện nhưng chỉ với mã khóa của CTRL.

  • giữ CTRL, báo chí một lá thư (ví dụ S.) - công trình như mong đợi

  • báo chí CTRL + chữ cái (ví dụ S.) - công trình như mong đợi

(Kết quả giống hệt nhau trong Chrome và Firefox. Hành vi được mô tả ở trên tiêu chuẩn?)

Tôi đang sử dụng:

  • function OnKeyDown(e) { }
  • e.ctrlKey, e.which tính chất của sự kiện

Câu hỏi đặt ra là: những gì có thể là vấn đề?

Trả lời

10

Bạn nên kiểm tra xem cờ event.ctrlKey là sự thật, một cái gì đó như thế này:

document.getElementById('element').onkeydown = function (e) { 
    e = e || window.event; 
    var keyCode = e.keyCode || e.which, 
     arrow = {left: 37, up: 38, right: 39, down: 40 }; 

    if (e.ctrlKey) { 
    switch (keyCode) { 
     case arrow.left: 
     //... handle Ctrl-LeftArrow 
     break; 
     //... 
    } 
    } 
}; 

Kiểm tra một ví dụ here.

+0

Tôi đang kiểm tra event.ctrlKey. Tôi đã viết nó trong câu hỏi của tôi. Tôi đã thử mã của bạn: http://pastebin.org/168399 - và nó không hoạt động - có thể đã xảy ra sự cố với bàn phím của tôi. –

+0

Tôi đã đăng mã lên pastebin vì tôi không biết trả lời câu trả lời của bạn bằng mã dài như thế nào (nhận xét quá ngắn, thêm mã như câu trả lời là thô lỗ, thêm mã vào câu hỏi là không có hệ thống). * CONFUSED * –

+0

Tôi đang phát [ở đây] (http://jsbin.com/ojaki3) với mã bạn đã đăng và nó hoạt động đúng cách, nếu * LeftArrow * (không có Ctrl) được nhấn, nó sẽ đặt "gosh", nếu * Ctrl * - * LeftArrow *, cảnh báo "heureka" ... – CMS

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