2015-06-03 32 views
1

我已經實現了三個jQuery的類似功能controling我的自定義事件(我不能在我的項目:-(使用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

編輯:

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

榮獲」爲IE工作,我猜? – P0rnflake

+0

我用'event.detail'得到了結果,但我需要用extraParameters作爲偵聽器函數參數來獲取它....對於我來說有一個重要的原因:參數必須作爲參數數組傳遞(而不是對象)! – xercool

+0

@xercool然後將所有數據作爲對象傳遞給對象'{'detail':{'key1':value1,'key2':'value2'}}' – Strikers