2009-07-31 23 views
16

Tôi đã tìm kiếm một giao dịch tốt và dường như không thể tìm thấy giải pháp thỏa đáng. Tôi hy vọng ai đó có thể giúp đỡ.Phím điều khiển phát hiện Javascript được tổ chức trên Mouseup

Trong khi tôi đang sử dụng jQuery, tôi cũng viết nhiều hàng nghìn dòng Javascript. Vì vậy, một giải pháp "tinh khiết" javascript là tốt.

Tôi đang cố gắng xác định xem khóa điều khiển có được giữ nguyên trên sự kiện di chuột hay không. Đó là nó; không có điều kiện tiên quyết nào khác. Có ai biết làm thế nào để làm điều này đáng tin cậy, qua trình duyệt?

Tôi đã thử lưu trữ này trong một biến trạng thái bằng cách ghi nhận khi phím được nhấn và thả:

// BEGIN store control key status in hash_state 
$().bind('keydown','ctrl',function(arg_obj_e){ 
    hash_state.sw_ctrldn = true; 
    console.debug(hash_state.sw_ctrldn); 
}); 
$().bind('keyup','ctrl',function(arg_obj_e){ 
    hash_state.sw_ctrldn = false; 
    console.debug(hash_state.sw_ctrldn); 
}); 
// END store control key status in hash_state 

Tuy nhiên, điều này thực sự không hoạt động. Nếu bạn kiểm tra điều này bằng cách sử dụng firebug và xem giao diện điều khiển, bạn sẽ thấy rằng tự động lặp lại dường như xảy ra và giá trị chuyển đổi.

Tôi kiểm tra các sự kiện mouseup để xem nếu có bất cứ điều gì hữu ích ở đó, nhưng không có kết quả:

var debugEvent = function(arg_obj_e){ 
    var str = ''; 
    for (var attr in arg_obj_e){ 
    str += attr + ': ' + arg_obj_e[attr] + '\n'; 
    } 
    console.debug(str); 
} 

Bất kỳ trợ giúp sẽ được đánh giá cao.

+0

Ồ, tôi không biết các sự kiện quan trọng được hỗ trợ của jQuery theo cách đó. Tôi không thể tìm thấy bất kỳ tài liệu nào về nó. Ngoài ra, không $(). Bind() (rỗng jQuery) làm việc, hoặc là chỉ cần viết tắt? Nếu vậy, nó có bị ràng buộc với $ (tài liệu) không? – eyelidlessness

+0

@eyelidlessness: Đó là loại ràng buộc là từ một plugin gọi là js-hotkeys http://code.google.com/p/js-hotkeys/ – CMS

Trả lời

32

Bạn có thể sử dụng thuộc tính event.ctrlKey.

$(function(){ 
    $('#elementId').mouseup(function(e){ 
    var isCtrlPressed = e.ctrlKey; 
    // true or false whether ctrl is pressed or not 
    }); 
}); 

Kiểm tra ví dụ đang chạy here.

+0

Wow, tôi đã tìm kiếm thuộc tính đó trong quá trình gỡ lỗi sự kiện và phải bỏ lỡ nó. Cảm ơn bạn! Làm việc như một nét duyên dáng trên FF3; bây giờ để xem về IE. –

+0

ps cảm ơn bạn đã demo, nó được đánh giá rất cao. –

+0

Bạn đang chào đón Michael, các công cụ sửa đổi chính này (shiftKey, ctrlKey, altKey) đã được giới thiệu trên tiêu chuẩn * DOM Level 2 * (http://is.gd/1Vryp) vào cuối năm 2000 và được hỗ trợ từ IE6. – CMS

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