2012-05-01 25 views
8

Về cơ bản, tôi đang sử dụng jQuery Hotkeys plugin do ông Resig để nắm bắt và xử lý các phím tắt như ctrl+o vv ...jQuery phím nóng ... không phải như vậy toàn cầu

OK, có lẽ tôi không uderstand khái niệm, nhưng tôi đã dưới ấn tượng rằng ctrl+o kích hoạt ở bất kỳ nơi nào bên trong tài liệu sẽ được trình xử lý phím nóng tài liệu ghi lại.

Ví dụ, đoạn mã sau hoạt động nói chung ...

jQuery(document).bind('keydown', 'ctrl+o', fn); 

Tuy nhiên, nó thất bại thảm hại nếu người dùng kích hoạt các phím nóng khi bên trong một hộp đầu vào.

Nó chỉ hoạt động nếu tôi làm như sau:

jQuery('body, input').bind('keydown', 'ctrl+o', fn); 

Đó là khá xấu cho sức khỏe của tôi kể từ khi nó liên quan đến ràng buộc xử lý chết tiệt mỗi lần một hộp đầu vào mới được thêm vào DOM. Tệ hơn nữa, tôi không biết phải ràng buộc gì trong trường hợp các widget phức tạp như CodeMirror.

Dunno nếu vấn đề của tôi có ý nghĩa, có lẽ tôi đang sử dụng cách tiếp cận sai? Tôi cũng đã cố gắng liên kết với các đối tượng sau đây, nhưng nó đã không làm việc: window, document, body, div[contains the whole page]

NB: Bạn có thể try it out here.

+0

có thể bạn có thể sử dụng 'on()' tại đây? vì vậy nó sẽ hoạt động với mọi đầu vào được thêm vào. Hay tôi đang thiếu một cái gì đó? –

+0

@Topener Tôi không muốn * chỉ * liên kết với tất cả các đầu vào * hiện tại *, nhưng bất kỳ * tương lai * nào khác. Vẻ đẹp của việc thêm các sự kiện theo cách này là bạn không cần các biến toàn cầu để chứa các hàm xử lý sự kiện của bạn, bạn chỉ cần thực hiện một lần khi cần. – Christian

+0

Nhưng vấn đề ở đây không phải là về việc tôi thêm các sự kiện, mà đúng hơn là chức năng phím nóng nên tự làm. Ý tôi là, đó là điểm của một phím nóng .... nhấn 'ctrl + s' trong trình soạn thảo Netbeans tạo ra tác dụng tương tự khi thực hiện nó trong danh sách dự án netbeans (ví dụ). – Christian

Trả lời

6

này là thực sự có ý định chức năng của plugin:

// Don't fire in text-accepting inputs that we didn't directly bind to 
if (this !== event.target && (/textarea|select/i.test(event.target.nodeName) || 
    event.target.type === "text")) { 
    return; 
} 
+0

Vâng, thành thực mà nói, tôi không biết cách khắc phục vấn đề của mình mà không thay đổi mã đó :( – Christian

+0

Tôi cho rằng mình có thể chuyển tùy chọn vô hiệu hóa tính năng ... sau đó gửi bản vá cho Resig's ... – Christian

+0

Vâng, tôi không thấy một cách nào đó xung quanh nó mà không sửa đổi plugin theo một cách nào đó –

1

Vâng, JqueryHotkeys thất bại thảm hại nếu người dùng kích hoạt các phím nóng khi bên trong một hộp đầu vào.

Cách khác, khi tôi duyệt, tôi phát hiện ra shortcut.js, cung cấp chức năng tương tự như chức năng của Jquery-Hotkeys.

Quan trọng là nó cũng có tùy chọn bật hoặc tắt "chức năng phím tắt do người dùng xác định" khi ở trong hộp nhập.

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