jQuery: как остановить распространение Ctrl + A?
В настоящее время я разрабатываю приложение, использующее карту (данные OpenStreetMap через Leaflet.js) и маркеры, отображаемые на карте.
Я реализовал выделение для пользователя, поэтому он может щелкнуть маркеры, чтобы выделить их, и нажать Ctrl, чтобы добавить маркеры к выделению. Это хорошо работает.
Теперь я бы хотел, чтобы пользователь мог выбрать все маркеры, которые в данный момент находятся на карте, нажав Ctrl A. Код, который я использую для достижения этой цели, выглядит следующим образом:
jQuery(document).keydown(function(e) {
if (e.ctrlKey) {
if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a'
e.stopPropagation();
// SELECT ALL MARKERS HERE...
}
}
});
Это работает в том, что касается одновременного нажатия клавиш Ctrl и A, выбор выполняется так, как я хочу.
Моя проблема: даже несмотря на то, что я добавил строку, чтобы остановить распространение события, браузер (протестированный в Chrome и Opera) все еще выполняет обычное Ctrl+A-Selection, т.е. в дополнение к моим маркерам, выбранным моей собственной реализацией выбора на карте, вся веб-страница выбрана. Это раздражает: рядом с картой на этой странице нет текста, который можно было бы выделить, так что в действительности нет никакого смысла - я хотел бы отключить Ctrl A, пока отображается моя карта.
PS Я пытался использовать код, показанный в разделе Как я могу отключить Ctrl+A (выбрать все), используя jquery в браузере? но не смог заставить его работать. Эта функциональность действительно в API?
2 ответа
Предположим, ваша ошибка в том, что вы используете e.stopPropagation()
который просто останавливает дальнейшее появление события (поскольку ваше событие прикреплено к документу - оно бесполезно). Пытаться e.preventDefault()
вместо:
jQuery(document).keydown(function(e) {
if (e.ctrlKey) {
if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a'
e.preventDefault();
// SELECT ALL MARKERS HERE...
}
}
});
Это отлично работает для меня в этой демонстрации
Ах, я нашел трюк:
e.preventDefault();
Останавливает браузер от выполнения любых действий по умолчанию. В описанном выше случае это предотвращает событие select-all, обычно запускаемое по Ctrl + A.