Вы должны позаботиться о том, чтобы у вас был другой экземпляр (даже если такая же версия) на странице, поскольку это может привести к неожиданному поведению и может привести к утечкам памяти, например. если вы удалите элемент с 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 Хорошая точка. Считайте меня обученным. –