1. Традиционная модель событий
Есть ограничения в традиционных моделях событий.
Встроенная модель используется в форме атрибутов тега HTML и смешивается с HTML. Этот метод, несомненно, вызывает проблемы с модификацией и расширением и редко используется.
Модель скрипта записывает функции обработки событий в файл JS, получает элементы со страницы, чтобы связать соответствующие функции события с запуск выполнения. Но есть также недостатки:
1. Одно событие связывает несколько функций прослушивания событий, последнее переопределяет первое.
2. Повторное связывание должно быть ограничено
3. Стандартизировать объекты события
2. Современное связывание событий
События на уровне DOM2 определяют два метода для добавления и удаления событий: addEventListener () и RemoveEventListener (). Они получают три параметра: имя события, функционирование, пузырьковое или захваченное логическое значение (истинный означает захват, ложно, пузырьки).
Соответственно, IE предоставляет два аналогичных метода ATTACEEDEVENT () и DETACHEVENT (), но два метода IE имеют другие проблемы: невозможно передать этот объект (это в точках IE в окно), вы можете использовать метод вызова, чтобы выдать себя за объект:
функция addEvent (obj, type, fn) {if (typeof obj.addeventListener! = 'undefined') {obj.addeventListener (type, fn, false); } else if (obj.attachevent! = 'undefined') {obj.attachevent ('on' + type, function () {fn.call (obj, window.event);}); }};Однако, поскольку анонимные функции выполняются при добавлении, их нельзя удалить после добавления; Кроме того, методы IE, предоставленные IE, также будут иметь такие проблемы, как неудачное выполнение событий связывания в последовательности и утечках памяти.
Чтобы решить эту серию проблем, необходимо дополнительно инкапсулировать метод и использовать стандарт уровня DOM2 для других браузеров. Для IE применяется добавление и удаление на основе традиционного режима. Идея:
1. Добавление - это использование хэш -таблицы JS для хранения событий объектов, назначить значение идентификатора каждому событию объекта и сначала определить, существует ли такая же функция обработки в порядке сложения. Если его не существует, добавьте функцию привязки события в хэш -таблицу по очереди. Это решает проблему неспособности выполнять последовательность и повторные дополнения.
2. При удалении он используется для оценки соответствия функции обхода. Если он существует, это удалено.
Суммировать:
У меня не было гораздо более глубокого понимания связывания событий JS, и я даже оставался в традиционной модели связывания событий, и у меня все еще было слишком мелкое понимание реализации программы. На этот раз, когда я выучил библиотеку инкапсуляций, я узнал много объектно-ориентированных приложений на JS. Хотя библиотеки JS, такие как JQUERY, достигли хорошего эффекта инкапсуляции механизмов связывания данных, я знаю только причину, но я не знаю, почему, и я чувствую, что если у меня есть чувство, что меня держат в темноте, я сам проанализирую конкретную реализацию, и я почувствую внезапное просветление. Я также понимаю, что для хорошей работы по совместимой и универсальной программе мне нужно рассмотреть много контента и решить много проблем, и я постепенно очищаю многие из этих проблем.