Подтвердить что ты не робот

Как привязать обработчик к изменению выбора в окне?

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

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

4b9b3361

Ответ 1

Обновление 2019

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

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

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

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

Ответ 2

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

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

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

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

пример jsfiddle

Ответ 3

Я думаю, что это помогло бы

function foo() {
   var selObj = window.getSelection(); 
   alert(selObj);
   var selRange = selObj.getRangeAt(0);
   // work something with selObj
}