2013-02-18 3 views
3

В то время как я понимаю, Javascript обработки событий в биты и куски, я хотел понять полную историю позади него, как то, как на самом деле была реализована обработка событий (может использовать его в разметке как <a onClick="callFunc()">)Javascript событий истории обработки

И как это позже было обновлено до чего-то еще, как позвонить ему из JS (ненавязчивый JS)

как его реализовать теперь с помощью jQuery?

Я просто хотел, чтобы понять преимущества на каждом этапе и такие вещи, как событие Bubbling/захват, и т.д.

+2

Вы просите небольшую диссертацию. Я думаю, вам нужно сделать свой вопрос гораздо более кратким и сосредоточенным, чтобы один человек мог ответить в разумном размере, чтобы соответствовать формату Q & A StackOverflow. Какие любопытные вещи вам нужно знать? – jfriend00

+0

Я просто пытаюсь понять, как механизм обработки событий Javascript эволюционировал с годами, а именно, как фреймворк вроде jQuery изменил способ обработки событий. Какие улучшения он привнес в таблицу? – testndtv

+1

[Quirksmode.org имеет очень хорошее представление о событиях] (http://quirksmode.org/js/introevents.html), который охватывает большинство ваших вопросов. – Bergi

ответ

4

Ну, там не так много к нему. Или, действительно, все, что было до этого, случилось долгое время назад.

.addEventListener был около тех пор, пока CSS имеет. Вот как долго DOM-Level2 был с нами (~ 13 лет, я думаю).

Это был не вопрос о том, как JS получил более продвинутый, это был вопрос о том, как JS-писатели не.

Программисты Я знаю, кто пишет JS как «второстепенную» или «третичную» роль STILL использовать inline-обработчики. Прошло более десяти лет, поскольку это была особенно хорошая идея.

Что касается «ненавязчивого», это не обязательно связано непосредственно с прослушивателями событий.
Это, если вы собираетесь каким-либо образом взаимодействовать с пользователем, но это скорее вопрос разделения проблем, так же, как мы больше не стиляем элементы типа <p><font color=red>red text</font></p>.

Возможно, одна из причин, что DOM-0 обработки событий (например, button.onclick = function() {}) вывесили вокруг так долго, и по-прежнему видим очень частое использование, из-за войны между Microsoft, attachEvent и W3C в addEventListener.

Если вы хотите поддерживать кросс-браузерные события в IE6-8, вы используете jQuery (или другую библиотеку), вы вручную создаете функции управления событиями, чтобы поддерживать как .attachEvent для IE, так и .addEventListener для все остальные, или вы непосредственно используете свойства события (.onclick = function() {}). Они пользуются поддержкой практически всех браузеров, используемых сегодня.
Они имеют ущерб только имея одну назначаемую функцию (что приводит к уродливым обработке, если вам нужно добавить больше из них):

(function() { 
    var button = document.getElementById("button"), 
     old_func = button.onclick; 

    button.onclick = function (e) { 
     e = e || window.event; 
     doStuff(); 
     if (old_func) { old_func(); } 
    } 
}()); 

... А теперь представьте себе 8 различных программистов добавления слушателей к той же кнопке, путь.

Что касается барботирования против захвата ...
Это никогда не было битвой (пост-Netscape).
Поддерживаемый Microsoft пузырь, W3C поддерживает оба. Никто на самом деле не использует захват для чего-либо, потому что очень мало раз вы хотите узнать о событии, прежде чем оно на самом деле произойдет, и до того, как цель даже знает, что это происходит (и поскольку единственный способ использовать захват должен был использовать addEventListener, что означает что ваше мероприятие не будет работать в IE ...)

Какой jQuery, представленный на столе, не был «новым» событием или «лучшими» событиями - то, что он сделал, разрешалось для каждого браузера для каждого события.
Много библиотек AJAX было это в качестве основной цели: нормализовать различия между addEventListener и attachEvent (которая была решена проблема, прежде, чем JQuery), а также между XMLHttpRequest и ActiveXObject("MSXML2.XMLHTTP.6.0"), (опять же, решил предварительно JQuery).

jQuery только что был любимцем толпы, и Resig сделал с ним что-то хорошее (в то время как пользователи jQuery сделали с ним некоторые ужасные вещи, заставив Resig и друзей быть супер-человеческими до идиотского DOM-обхода и делегирование событий, а остальное).

Некоторые из нас стали лучше с делегацией событий и т. П. В течение последних 6 лет, поскольку люди, подобные Дугласу Крокфорду и Николаю Закасу, занимали правление социальной сферы, пишут хорошие книги и великие беседы о профессиональный, высокопроизводительный JS.

И за последние несколько лет больше людей вступили в дизайн шаблонов, которые видны на других языках, которые видят использование предприятия.

Вещи, подобные обещаниям/отсрочкам/фьючерсам (/$.when) - будущее JS-engineering, когда речь идет о асинхронном программировании на стороне клиента для веб-приложений.

Это не означает, что он будет выглядеть на 100%, как сегодня, но это означает, что поддержание прямых событий DOM является решаемой проблемой - поддержание их в соответствии со всеми асинхронными вещами, которые могут произойти в любой момент, в любом виджетах на странице ...
... вот где обещания пригождаются.

Затем у вас есть модераторы/наблюдатели для обеспечения безопасности и развязки межмодульной связи.
Это могут быть «персонализированные события» или «эмитенты» ... ... или «издатель/подписчики».
Вещи, которые вы можете слушать и действовать.
Они могут быть вызваны действительными событиями браузера или могут быть вызваны в коде.

Опять же, jQuery не изобретал и не совершенствовал это, но любое событие, которое вы подписываете в jQuery, делает одну из этих вещей под капотом.

То же самое с $.ajax - на самом деле это не используется с событиями DOM, оно проходит Promises вокруг, на которое вы можете подписаться. Единственными DOM-событиями, которые он использует, являются те, которые фактически извлекают данные с сервера. После этого все это обычае.

В последние несколько лет мы совершили огромные прыжки с точки зрения того, что может сделать JS, и как мы обрабатываем взаимодействие и асинхронность.

Немного из того, что имело какое-либо отношение к достижениям в том, как addEventListener стал лучше, или как jQuery помог нам преодолеть разрыв между IE8 и остальными браузерами.

+0

Я по-прежнему использую атрибуты обработчика событий, обычно (но не всегда) при прототипировании: это еще самый быстрый способ добавить обработчик событий. –

0

По моему пониманию 1. Соотношение Javascript с html обрабатывается событиями. Указывает, когда в окне браузера или документе появляется конкретный момент. Эти события могут обрабатываться слушателями. 2.event bubbling говорит, что -event запускается в позиции, где событие было запущено и перетекает в восходящее направление до уровня документа. i.e- div-body-html-document. Пример: 1. Здесь функция прослушивателя событий будет иметь локальный объект по умолчанию, называемый событием. в котором указывается тип события. 2. здесь говорится о целевом элементе события.

Метод event.preventDefault() останавливает действие элемента по умолчанию.

Категории групп: Взаимодействие с пользователем События/События фокуса/Мыши События/События колес/Текстовые события/События Key Board. Эти события будут отличаться от мобильных устройств.

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