Почему событие триггера не вызывает события, определенные с помощью addEventListener

Я создал пример:

http://jsfiddle.net/y42pu5b6/

$(function(){
    function ping (){ 
        alert( "function fired" ); 
        console.log("fired"); 
    }
    console.log($("input#one")[0]);
    $("input#one")[0].addEventListener("change", ping);
    $("input#one").trigger("change");

    $("input#two").on("change", ping);
    $("input#two").trigger("change");

});

Похоже, что с jQuery вы можете использовать "триггер" и событие, применяемое при вызове addEventListener. Для этого есть причина? Я был под понятием, что поскольку триггер - это метод jquery, он только сканирует объект jQuery для обработчиков, а не то, что на самом деле применяется к объекту.

Я считаю, что триггер должен срабатывать для всех применимых событий, независимо от того, были ли они добавлены через on или addEventListener. Возможно, он делает снимок кода на таймфрейме X и хранит его в объекте jquery. Я не уверен.

Может быть, кто-то еще имеет более глубокое понимание этого, чем я?

+3
источник поделиться
1 ответ

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

Следовательно, когда вы вызываете trigger, jQuery запускает только свои связанные события (используя on, bind, click и т.д.), но он не пытается запустить связанный с природой события.

См. http://learn.jquery.com/events/triggering-event-handlers/

+2
источник

Посмотрите другие вопросы по меткам или Задайте вопрос