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.

Другие вопросы по тегам