Как привязать обработчик к изменению выбора в окне? - PullRequest
13 голосов
/ 24 января 2012

По сути, мне нужно знать, когда window.getSelection() изменился, и связать обработчик с этим событием.Идеи?

OBS: Обратите внимание, что я не собираюсь связывать изменения выбора на INPUT или TEXTAREA.Я говорю о любом выборе в окне.

Ответы [ 3 ]

17 голосов
/ 27 января 2012

2019 обновление

Все основные браузеры теперь поддерживают событие selectionchange , которое выполняет эту работу.Firefox был последним браузером, получившим его, и он имел его без флага конфигурации с версии 52 (выпущена в марте 2017 года).

Оригинальный ответ

Естьнет кросс-браузерного способа обнаружения изменений в выборе.IE (начиная с версии 5.5, я думаю) и браузеры WebKit / Blink (например, версии Chrome, Safari и Opera последних двух лет) поддерживают событие selectionchange на document, которое выполняет именно то, что вам нужно.

Firefox и pre-Blink Opera не имеют такого события, и все, что вы можете сделать, это обнаружить изменения выбора, сделанные с помощью событий клавиатуры и мыши, что является неудовлетворительным (нет способа обнаружить «Выбрать все» из контекста или редактировать меню, например), или просто опросите объект Selection, возвращаемый window.getSelection() (проверка свойств anchorNode, anchorOffset, focusNode и focusOffset выбора относительно их предыдущих значений должна быть достаточной).

9 голосов
/ 31 января 2012

Для этого не существует кросс-браузерного события.

Однако, существует событие с именем selectionchange, которое срабатывает при каждом изменении выделения в документе, но поддерживается только в IE и последних версиях WebKit (Chrome / Safari), поэтому Firefox / Opera отсутствует.

Вы можете использовать событие selectionchange следующим образом:

$(document).on('selectionchange', function(e) {
    console.log('selectionchange', e.originalEvent); 
});

Пример jsfiddle

0 голосов
/ 24 января 2012

Думаю, это поможет

function foo() {
   var selObj = window.getSelection(); 
   alert(selObj);
   var selRange = selObj.getRangeAt(0);
   // work something with selObj
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...