2012-01-07 18 views
4

自定義事件做這件事時:jQuery的吃我的數據在某些屬性名稱

$(document.body).on(
    'myevent', 
    function (ev) { 
    console.log(ev.data, ev.result); 
    } 
); 

$(document.body).trigger(
    $.Event(
    'myevent', 
    { 
     data: 'foo', 
     result: 'bar'  
    } 
) 
); 

控制檯返回[null, undefined]。這是預期的嗎?我發現它很麻煩,因爲沒有原始事件來複制這些屬性,並且我將耗盡屬性名稱來發送服務器響應。

裁判:​​

REF:文檔的http://api.jquery.com/category/events/event-object/

注形容這種行爲。如果有人知道爲什麼,並從jQuery源代碼解釋,這將是偉大的;如果它出乎意料,我們可以提交一個錯誤。

回答

5

ev.data屬性在.on()調用中傳遞的數據,並沒有什麼傳遞,因此它返回null。您在致電$.Event時添加的數據屬性被null覆蓋。不要使用這裏提到的自定義數據名稱的任何屬性名稱: http://api.jquery.com/category/events/event-object/

+0

你能在'jquery.js'中找到真正做到這一點的實際行號嗎? – timdream 2012-01-09 08:43:36

+0

https://github.com/jquery/jquery/blob/master/src/event.js#L447 – 2012-01-11 02:40:49

5

怎麼樣

$(document).on('myevent',"body",function (ev,x) { 
    console.log(x.data); 
    console.log(x.result); 
    } 
); 
$(document.body).trigger('myevent',{data:'foo',result: 'bar'}); 

http://jsfiddle.net/ZbBAh/17/

+1

謝謝(+1),我完全知道有額外的屬性的第二個參數。我只是不喜歡這種方式。 – timdream 2012-01-09 08:44:41

0

我不知道是誰,這可能幫助,但至少有一次,我發現自己與混合代碼看起來像這樣:

... .trigger('myevent', $.Event('myevent', {data: 'foo',result: 'bar'}))' 

即提供事件名稱作爲.trigger的參數並提供具有自定義數據**自定義數據**的事件對象。

的代碼應該是

... .trigger($.Event('myevent', {data: 'foo',result: 'bar'}))' 

... .trigger('myevent', {data: 'foo',result: 'bar'})' 
當然

他們不是在你在你的事件處理程序獲得的數據相同,但至少他們都工作...

相關問題