как это работает в IE7?
captureEvents()
- неприятный, ненадежный интерфейс событий эпохи Netscape 4, который всегда был сомнительным и не должен использоваться ни для чего. В новых версиях IE и Firefox отсутствует его поддержка. Похоже, ваши скрипты нуждаются в серьезном обновлении.
Добавление приемника ошибок - тоже довольно плохая идея. Учет ваших ошибок под ковром делает вашу работу по поиску ошибок более сложной и не влияет на обычных пользователей (так как у них будут настройки браузера по умолчанию не открывать отчет об ошибках JS).
Так что в более новой IE8 мы можем сделать document.onmouseup = someFunction;
без необходимости document.captureEvents(Event.MOUSEUP);
Исправить?
Да, но он использует «пузыриться», а не «захватывать». В этом случае события по-прежнему будут запускаться для дочерних элементов и будут «пузыриться» через каждого из предков, пока не попадут в документ.
Идея «захвата» заключается в том, что элемент-предок (документ) может вообще не допустить получения потомками каких-либо уведомлений о событии. Захват событий не часто требуется на практике и является проблемой, поскольку в разных браузерах это делается по-разному.
IE использует метод setCapture()
. Другие современные браузеры используют модель событий W3C DOM, передавая true
в качестве третьего аргумента addEventListener()
(это не работает с моделью событий DOM 0 при назначении функции onclick
и др.). captureEvents()
было так, как это было сделано в древнем Netscape. Другие старые или нишевые браузеры вообще не имеют возможности захвата событий.
В целом: лучше избегать захвата событий. Проверьте, действительно ли скрипт требует этого. Возможно, нет: если это скрипт, предназначенный для запуска в Netscape 4 (retch), он мог бы использовать captureEvents()
, даже если он не нуждался в захвате, потому что были некоторые сломанные части модели событий Netscape, которые не работали прямо с пузырьками.