2015-06-03 2 views
1

У меня есть реализовать три JQuery-подобные функций для контролирования моих пользовательских событий (я не могу с помощью JQuery в моем проекте :-():Передача параметров прослушивателя событий с помощью встроенного javascript?

var Events = { 
    on: function(evt, fn) { 
     document.addEventListener(evt, fn); 
    }, 
    off: function() { 
     document.removeEventListener(evt, fn); 
    }, 
    trigger: function(evt, params) { 
     var event; // The custom event that will be created 
      if (document.createEvent) { 
       event = document.createEvent("HTMLEvents"); 
       event.eventName = evt; 
       event.initEvent(evt, true, true); 
       event.data = params; 
       window.dispatchEvent(event); 
      } else { 
       event = document.createEventObject(); 
       event.eventName = evt; 
       event.eventType = evt; 
       event.data = params; 
       window.fireEvent("on" + event.eventType, event); 
      } 
    } 
} 

Когда я с помощью моего наблюдателя реализации у меня есть:

Events.on('custom', function(e) { 
     console.log(e.data); // output [5,10,15] 
}); 

Events.trigger('custom', [5, 10, 15]); 

Но мне нужно изменить свою функцию триггера для вызова слушателя с дополнительными параметрами после объекта события Что-то вроде jquery.trigger() функции с extraParameters атрибутом для моего примера:..

Events.on('custom', function(e, a, b, c) { 
    console.log(a, b, c); //output [5,10,15] 
}); 

Events.trigger('custom', [5,10,15]); 

ответ

1
var event = new CustomEvent('build', { 'detail': 'test' }); 


    // Listen for the event. 
    document.addEventListener('build', function (events) { 
     console.log(events.detail) 
    }, false); 

    // Dispatch the event. 
    document.dispatchEvent(event); 

Таким образом, вы можете передать данные в пользовательский событие создается

ref

EDIT:

if (window.CustomEvent) { 
    var event = new CustomEvent('my-event', {detail: {some: 'data'}}); 
} else { 
    var event = document.createEvent('CustomEvent'); 
    event.initCustomEvent('my-event', true, true, {some: 'data'}); 
} 

это JQuery эквивалентно вызвать

+1

Won» t работа для IE, я думаю? – P0rnflake

+0

Я получил результаты с 'event.detail', но мне нужно получить его с extraParameters как аргументы функции слушателя .... Это важно для меня по одной причине: параметры должны передаваться как массив аргументов (а не как объект)! – xercool

+0

@xercool затем передает все данные в деталях как объект '{'detail': {'key1': value1, 'key2': 'value2'}}' – Strikers

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