如果頁面上有不同的實例(即使是相同的版本),您應該小心,因爲這可能會導致意外的行爲並可能導致內存泄漏,例如,如果您移除一個含有jQuery191
的元素(.data(...)
或事件偵聽器),該元素與jQuery162
一起存儲,則這些元素將保留在內存中,直到您重新加載頁面爲止。
但回到你的問題。 我不會推薦它,但你可以加倍事件(觸發它與兩個版本)。 這種方法的問題是它會減慢一切。 而另一個問題是你有兩個冒泡階段。因此,如果您阻止jQuery191
中的事件,它仍然會在jQuery162
之後執行,反之亦然。
因此,它可能是一個適合你的解決方案,但它也可能使事情更加惡化。 所以你需要檢查你的自我,如果這個解決方案是你可以使用的東西。 也許你也可以刪除其中一個加倍部分。
(function() {
//keep the original functions
var trigger191 = jQuery191.fn.trigger;
var trigger162 = jQuery162.fn.trigger;
jQuery191.fn.trigger = function(evt) {
trigger191.apply(this,arguments); //call orginal function
//only double certain events
if(evt == "my-custom-event") {
var resultset162 = jQuery162(jQuery191.makeArray(this));//create a ne result set of the 162 version
trigger162.apply(resultset162,arguments); //call the original function of 162 to avoid an endless loop
}
};
jQuery162.fn.trigger = function(evt) {
trigger162.apply(this,arguments); //call orginal function
//only double certain events
if(evt == "my-custom-event") {
var resultset191 = jQuery191(trigger162.makeArray(this));
trigger191.apply(resultset191,arguments); //call the ofiginal function of 191 to avoid an endless loop
}
};
})();
(我希望代碼工作的方式。我敢肯定它應該工作,但現在我不能測試它)
你試過了嗎?我不明白爲什麼它不起作用,但正如你所說,使用兩個不同版本的jQuery並不理想。 –
@RoryMcCrossan自定義事件不是真實事件,並且使用jQuery存儲的內部數據進行處理。因爲每個jQuery實例都有自己的用於內部數據的'jQuery.expando'。事件處理程序在不同的實例之間完全隔離,即使它們具有相同的版本。 –
@ t.niese好點。考慮我接受教育。 –