Я пишу плагин, который можно использовать на любом веб-сайте, где я не знаю точную версию jquery и получаю несколько проблем с .on()
.
Чтобы исправить это, у меня есть что-то простое, но все равно получаю ошибки в jQuery 1.4.2.
var $myElements = $('.elements'),
myFunction = function(e){
console.log('here');
e.preventDefault();
}
if (typeof jQuery != 'undefined') {
if(jQuery.fn.jquery < 1.4){
$myElements.live('click', myFunction);
} else {
$(document).on('click', $myElements, myFunction);
}
}
Основываясь на предыдущем ответе, вы также можете сделать это:
;(function($) {
if(!$.fn.on) {
$.fn.on = $.fn.live;
}
}(window.jQuery || window.Zepto));
Затем вы можете использовать on
в остальной части кода.
.on
поэтому, если я .on
параметр делегирования события, произойдет сбой. Только одна из сотен предостережений такого подхода
Вы должны объединить свою собственную версию jQuery, чтобы сэкономить много хлопот и много избыточного кода. Вы можете сделать это, используя noConflict, чтобы гарантировать, что и ваш код, и код исходного веб-сайта действуют независимо:
<!-- load your jQuery -->
<script type="text/javascript" src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript">
var yourjQueryVersion = $.noConflict(true);
(function($) {
// Now you can use $ just like you normally would
// And it will only execute against jquery-1.11.0
$(function() {
var $myElements = $('.elements'),
myFunction = function(e){
console.log('here');
e.preventDefault();
}
$(document).on('click', $myElements, myFunction); // Yay!
});
})(yourjQueryVersion);
</script>
Это значит, что: