правильно свяжите события JavaScript

Я просто нашел список символов сочетания клавиш w/определениями под Пакеты > HTML > Объекты - полезный для меня в выяснении целого продолжения золотого дна ярлыка TextMate.

18
задан Jan Carlo Viray 7 February 2012 в 00:07
поделиться

3 ответа

Это можно сделать двумя разными способами. Только один будет работать; какой зависит от браузера. Вот служебный метод, который использует оба:

function bindEvent(element, type, handler) {
   if(element.addEventListener) {
      element.addEventListener(type, handler, false);
   } else {
      element.attachEvent('on'+type, handler);
   }
}

В вашем случае:

bindEvent(window, 'load', function() {
    // all elements such as images are loaded here
});
35
ответ дан 30 November 2019 в 06:02
поделиться
window.onload = function() {
   // ...
};
2
ответ дан 30 November 2019 в 06:02
поделиться

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

@ d. Ответа будет достаточно для конкретного случая события load окна window вы ищете. Но это может дать начинающим читателям вашего кода ложное представление о том, что "все сделано правильно". То, что вы связали событие, не означает, что вы позаботились о его нормализации. Возможно, вам лучше просто исправить window.onload :

window.onload = (function(onload) {
  return function(event) {
    onload && onload(event);

    // now do your thing here
  }
}(window.onload))

Но для общего случая привязки событий ответ @d настолько далек от удовлетворительного, что даже разочаровал. Почти единственное, что он делает правильно, - это использование функции обнаружения, а не обнаружения браузера.

Не хочу здесь слишком много разглагольствовать, но привязка событий JavaScript, вероятно, №1 причина, по которой следует использовать библиотеку JavaScript. Меня не волнует, какой именно, другие люди исправляли эту проблему снова и снова. Вот проблемы в самодельной реализации внутри вашей функции-обработчика:

  • Как удержать сам объект event ?
  • Как предотвратить действие события по умолчанию (например, щелчок по ссылке, но не переход)
  • Почему this указывает на объект window все время?
  • (Re mouse events) Каковы координаты x / y события?
  • Какая кнопка мыши вызвала событие?
  • Было ли это нажатие Ctrl или обычное нажатие?
  • На каком элементе действительно было инициировано событие?
  • На каком элементе событие переходит в ? (например, relatedTarget , скажем, для blur )
  • Как мне отменить всплытие события через его родительский DOM?
  • (Повторное всплытие события) какой элемент на самом деле получаете событие сейчас? (например, currentTarget )
  • Почему можно t Я получаю долбанный код символа из этого события keydown ?
  • Почему у моей страницы происходит утечка памяти, когда я добавляю все эти обработчики событий ?? Аргх!
  • Почему я не могу отвязать эту анонимную функцию, которую я связал ранее?

И список продолжается ...

Единственная веская причина бросить свою собственную в эти дни - это обучение. И это нормально. Тем не менее, прочтите PPK Введение к событиям браузера . Взгляните на источник jQuery . Посмотрите на Источник прототипа . Вы не пожалеете об этом.

прочтите PPK Введение в события браузера . Взгляните на источник jQuery . Посмотрите на Источник прототипа . Вы не пожалеете об этом.

прочтите PPK Введение в события браузера . Взгляните на источник jQuery . Посмотрите на Источник прототипа . Вы не пожалеете об этом.

18
ответ дан 30 November 2019 в 06:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: