2009-02-20 2 views
3

Я пытаюсь разгадать пользовательские события. Я понимаю, как регистрировать и запускать пользовательские события. Однако кажется, что невозможно зарегистрировать действительно настраиваемые события. Все нужно проследить до события DOM, такого как щелчок, загрузка, размытие и т. Д. Или я ошибаюсь?Javascript - Попытка обернуть голову вокруг пользовательских событий

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

Есть ли способ зарегистрировать событие для моего массива и заставить его автоматически срабатывать при изменении длины?

ответ

3

Пользовательские события находятся в W3C spec, но ни один из основных браузеров не поддерживает их. Вот почему несколько других пользователей предложили сторонние библиотеки. Прототип, YUI, JQuery и большинство других имеют эти возможности. Вы также можете roll your own.

Если вы хотите увидеть, как может выглядеть какой-то пользовательский синтаксис событий, вы можете посмотреть на this tutorial for Prototype custom events. Некоторые важные моменты:

  • Прототип пользовательских событий должен быть прикреплен к элементам DOM, чтобы они могли пузыриться как родные события.
  • Они должны быть в синтаксисе prefix:event для того, чтобы стрелять
  • Они могут содержать очень полезные memo параметр, который позволяет любой произвольный контекст или набор объектов пузырь с событием.
2

Почему бы вам не написать метод addElement для вашего массива, который вы будете использовать всякий раз, когда хотите вставить элементы, тем самым вы сможете писать код в случае изменения array.length. такой же предмет с removeElement. События не предназначены для использования в таких вещах.

+0

Это один из способов сделать это, но мой пример не был конкретной проблемой, которую я пытаюсь решить, просто пример, чтобы объяснить, о чем я смущен. – Geuis

Смежные вопросы