2014-02-17 37 views
0

保留自定義屬性我有一個安裝在理論上是這樣[見琴 - >http://jsfiddle.net/GeZyw/]:捕捉的Javascript自定義事件的jQuery的()在第一個「級別」

var EventTest = function(element) { 
    this.element = element; 
    this.element.addEventListener('click', elementClick); 

    function elementClick() { 
     var event = document.createEvent('CustomEvent'); 
     event.initEvent('myevent', false, false); 
     event['xyz']='abc'; 
     event.customData='test'; 
     console.log(event); 
     this.dispatchEvent(event); 
    } 
} 

var element = document.getElementById('test'); 
var test = new EventTest(element); 

$(document).ready(function() { 
    $("#test").on('myevent', function(e) { 
     console.log('myevent', e); 
    }); 
}); 

我要的是建立一個在純JavaScript中的CustomEvent,使用一些屬性來豐富它,並觸發該事件,這樣它也可以通過像jQuery這樣的庫來捕捉。

正如你可以在小提琴中看到的那樣,CustomEvent觸發得很好,它實際上是用自定義屬性填充的 - 但是當它到達jQuery on()時,自定義屬性從第一級消失。我的自定義屬性現在降級到e.originalEvent.xyz等等。

這並不是很理想。我想至少我自己的屬性是在第一級。

此外,在一個完美的世界,我想擺脫大部分在分派的事件的標準特性,所以它包含了(理論上最優的):

e = { 
    xyz : 'abc', 
    customData : 'test' 
} 

那是不可能的?如果是這樣,我該怎麼做?

+1

爲什麼downvote? – davidkonrad

回答

1

我遇到了同樣的問題,幾個月前,該點是:

當通過jQuery的接收事件,它規範了事件屬性將分派事件註冊的事件處理程序之前。

也:

事件處理程序將不會被接受的原始事件。相反,他們會獲得一個新的jQuery.Event對象,其中包含從原始HTML事件中複製的屬性。

爲什麼jQuery不會說:

,因爲它不能設置一個原始的HTML事件屬性。

我已經決定這樣做,我開始討厭的方式做到這一點,和我的代碼結束瞭如此凌亂,最後我決定用jQuery.trigger解決方案,並通過我的事件對象作爲第二PARAM,如:

$("#test").bind("myevent", function(e, myeventobj) { 
    alert(myeventobj.xyz); 
}); 
var myobj = {"xyz":"abc"}; 
$("#test").trigger("myevent", myobj); 

更多信息檢查此鏈接了:.trigger()

+0

+1。我自己也有這個想法。但我想要的是避免任何**從我的代碼中使用jQuery,所以'trigger'實際上不是一種選擇。我想要的是讓它「更容易」,如果**你以後通過jQuery捕捉事件。 – davidkonrad

+0

我給你接受的答案。現在意識到這是一個關於問題的問題。我已經通過jQuery代碼,沒有什麼可以做的。總而言之,這並不重要,我只是想要「乾淨」的eventData,一種hybris,但是到底是什麼。我沒有按照你的建議使用'trigger'-方法,因爲我參加了避免jQuery,但你解釋了一些我以前不知道的東西。 – davidkonrad