2013-08-01 31 views
5

Tôi đang cố gắng nắm bắt một số sự kiện keydown trong ứng dụng của mình nhưng chỉ khi không có phím "điều khiển" nào được giữ lại cùng một lúc. Tôi không muốn gặp sự cố với lối tắt bàn phím của trình đọc màn hình. Shift, CtrlAlt dễ dàng kiểm tra vì chúng đang ở trên sự kiện javascript, nhưng tôi cũng cần kiểm tra các phím InsWindows cũng như bất kỳ phím điều khiển Mac nào.Làm thế nào để biết khóa chèn đã được giữ xuống

Đây là những gì tôi đã có cho đến nay và nó hoạt động như mong đợi, nhưng sự kiện của tôi vẫn được kích hoạt khi Ins hoặc Windows bị giữ.

handleKeydown: function(event) { 
    var comboKeyPressed = event.ctrlKey || event.shiftKey || event.altKey; 
    if(!comboKeyPressed && event.keyCode === $.ui.keyCode.HOME) { 
    event.preventDefault(); 
    this.$('>ul>li:last').attr('tabindex', -1); 
    this.$('>ul>li:first').attr('tabindex', 0).focus(); 
    } else if (!comboKeyPressed && event.keyCode === $.ui.keyCode.END) { 
    event.preventDefault(); 
    this.$('>ul>li:first').attr('tabindex', -1); 
    this.$('>ul>li:last').attr('tabindex', 0).focus(); 

    } 
} 

Có cách nào để kiểm tra các phím điều khiển khác một cách dễ dàng hay tôi cần phải nắm bắt những sự kiện và bám chặt vào chúng trong một số Boolean toàn cầu như this.isInsertPressed?

Trả lời

3

Bạn có thể làm một cái gì đó như thế này:

var keysPressed = {}; 
var keys = { insert: 45 };  
$(window).keydown(function(e) { keysPressed[e.which] = true; }); 
$(window).keyup(function(e) { keysPressed[e.which] = false; }); 

Và sau đó:

if (keysPressed[keys.insert]) { 
    // insert key is currently down 
} 
1

Sử dụng keycode tài sản trong Event object

if(event.keyCode === 45) // Insert Key 
+0

Điều đó sẽ nắm bắt nó khi nó ban đầu ép, nhưng nó vẫn giữ xuống khi 'event.keyCode === $ .ui.keyCode.HOME' và tôi cần phải không cho phép điều đó làm bất cứ điều gì. –

+0

Bạn cũng cần phải theo dõi sự kiện khóa và kiểm tra xem khóa trước đã được phát hành chưa –

0

Sử dụng event.key và JS hiện đại!

Không có mã số nữa. Bạn có thể kiểm tra trực tiếp Chèn trực tiếp.

let isInsertDown = false; 
document.addEventListener("keydown", function (event) { 
    if (event.key === "Insert") { 
     isInsertDown = true; 
    } 
}); 
document.addEventListener("keyup", function (event) { 
    if (event.key === "Insert") { 
     isInsertDown = false; 
    } 
}); 

Mozilla Docs

Supported Browsers