jQuery: как остановить распространение Ctrl + A?

В настоящее время я разрабатываю приложение, которое использует карту (данные OpenStreetMap через Leaflet.js) и маркеры, отображаемые на карте.

Я реализовал выбор для пользователя, чтобы он мог щелкнуть маркеры, чтобы выделить их, и щелкнуть, удерживая нажатой клавишу Ctrl, чтобы добавить маркеры к выбору. Это хорошо работает.

Теперь я хочу, чтобы пользователь мог выбрать все маркеры, находящиеся в данный момент на карте, нажав CtrlA. Код, который я использую для этого, выглядит так:

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, т.е. в дополнение к тому, что мои маркеры выбираются моей пользовательской реализацией выбора на карте, выбирается вся веб-страница. Это раздражает: кроме карты на этой странице нет текста, который можно было бы выбрать, так что в этом нет смысла - я хотел бы отключить CtrlA, пока моя карта Показано.

P.S. Я попытался использовать код, показанный в Как я могу отключить Ctrl+A (выбрать все) с помощью jquery в браузере?, но не смог заставить его работать. Эта функция действительно есть в API?


person fgysin    schedule 26.11.2012    source источник


Ответы (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...
    }
  }
});

У меня это отлично работает на этой демонстрации

person Viktor S.    schedule 26.11.2012
comment
А, мы нашли его в ту же секунду... :) Вот, хорошо, сэр, примите. - person fgysin; 26.11.2012

О, я нашел подвох:

e.preventDefault();

Запрещает браузеру выполнять какие-либо действия по умолчанию. В случае, описанном выше, это предотвращает событие select-all, которое обычно запускается при Ctrl+A.

person fgysin    schedule 26.11.2012