2012-11-26 37 views
7

Tôi hiện đang phát triển một ứng dụng dựa trên bản đồ (dữ liệu OpenStreetMap qua Leaflet.js) và các điểm đánh dấu được hiển thị trên bản đồ.jQuery: Làm thế nào để ngừng truyền bá Ctrl + A?

Tôi đã triển khai lựa chọn cho người dùng, vì vậy, anh ấy có thể nhấp vào điểm đánh dấu để chọn và Ctrl-click để thêm điểm đánh dấu vào lựa chọn. Điều này hoạt động tốt.

Bây giờ, tôi muốn người dùng có thể chọn tất cả các điểm đánh dấu hiện tại trên bản đồ bằng cách nhấn CtrlA. Mã tôi sử dụng để đạt được điều này trông giống như sau:

jQuery(document).keydown(function(e) { 
    if (e.ctrlKey) { 
    if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a' 
     e.stopPropagation(); 
     // SELECT ALL MARKERS HERE... 
    } 
    } 
}); 

Điều này hoạt động như kích hoạt trên đồng thời Ctrl và phím A có liên quan, lựa chọn được thực hiện như tôi muốn.

Vấn đề của tôi: Mặc dù tôi đã thêm dòng ngừng tuyên truyền về sự kiện này, trình duyệt (thử nghiệm trên Chrome và Opera) vẫn hiện Ctrl thông thường + A-Selection, tức là bổ sung để đánh dấu của tôi nhận được được chọn bởi triển khai lựa chọn tùy chỉnh của tôi trên bản đồ, toàn bộ trang web được chọn. Điều này gây phiền toái: bên cạnh bản đồ không có văn bản trên trang này có thể được chọn, vì vậy thực sự không có điểm - Tôi muốn tắt CtrlA trong khi bản đồ của tôi được hiển thị.

P.S. Tôi đã cố gắng sử dụng mã được hiển thị trong How can I disable Ctrl+A (select all) using jquery in a browser? nhưng không thể làm cho mã hoạt động. Chức năng này có thực sự trong API không?

Trả lời

10

Giả sử sai lầm của bạn là bạn đang sử dụng e.stopPropagation() mà chỉ dừng lại sự sôi nổi của một sự kiện (vì sự kiện của bạn được đính kèm vào tài liệu - nó vô ích). Hãy thử e.preventDefault() thay vì:

jQuery(document).keydown(function(e) { 
    if (e.ctrlKey) { 
    if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a' 
     e.preventDefault(); 
     // SELECT ALL MARKERS HERE... 
    } 
    } 
}); 

này hoạt động tốt đối với tôi trên this demo

+0

Ah, chúng tôi tìm thấy nó rất giống nhau ... :) Ở đây bạn đi tốt sir, có một chấp nhận. – fgysin

+0

Không hoạt động với tôi trong chrome –

0

Ah, tôi thấy các trick:

e.preventDefault(); 

Dừng trình duyệt từ thực hiện bất kỳ hành động mặc định. Trong trường hợp được mô tả ở trên, điều này ngăn sự kiện chọn tất cả thường được kích hoạt trên Ctrl + A.

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