Ответ 1
Проблема может быть, если вы используете более старую версию jQuery. Поскольку более старые версии jQuery имеют "живой" метод вместо 'on'
Я использую jQuery litebox. После добавления JS и CSS файлов я получил эту ошибку TypeError:
$(...).on is not a function at this line in js file
"return $('body').on('click',
'a[rel^=lightbox], area[rel^=lightbox]', function(e) {"
Может ли кто-нибудь помочь мне понять проблему здесь?
Я выполняю эту реализацию в CakePHP 1.3.
Проблема может быть, если вы используете более старую версию jQuery. Поскольку более старые версии jQuery имеют "живой" метод вместо 'on'
Обычная причина этого в том, что вы также используете Prototype, MooTools или какую-либо другую библиотеку, которая использует символ $
, и вы включаете эту библиотеку после jQuery, и поэтому библиотека "выигрывает" "(взяв $
для себя). Таким образом, возвращаемое значение $
не является экземпляром jQuery, поэтому на нем нет методов jQuery (например, on
).
Вы можете использовать jQuery с этими другими библиотеками, но если вы это сделаете, вы должны использовать символ jQuery
, а не его псевдоним $
, например:
jQuery('body').on(...);
И обычно это лучше всего, если вы добавите это сразу после тэга script
, включая jQuery, перед тем, как включить в него другую библиотеку:
<script>jQuery.noConflict();</script>
... хотя это не требуется, если вы загружаете другую библиотеку после jQuery (это если вы сначала загружаете другую библиотеку).
Использование нескольких полнофункциональных библиотек DOM-манипуляций на одной странице не является идеальным, хотя и с точки зрения веса страницы. Поэтому, если вы можете использовать только Prototype/MooTools/все или только jQuery, это обычно лучше.
Эта проблема решена, в моем случае, путем инкапсуляции моего jQuery в:
(function($) {
//my jquery
})(jQuery);
Если вы используете старую версию jQuery (< 1.7), вы можете использовать "bind" вместо "on". Это будет работать только в том случае, если вы используете старую версию, поскольку с jQuery 3.0 "bind" устарел.
Я попробовал решение Оскара (и многих других), но для меня он окончательно работал только с:
jQuery(function($){
// Your jQuery code here, using the $
});
Смотрите: https://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/
В моем случае этот код решил мою ошибку:
(function (window, document, $) {
'use strict';
var $html = $('html');
$('input[name="myiCheck"]').on('ifClicked', function (event) {
alert("You clicked " + this.value);
});
})(window, document, jQuery);
Вы не должны помещать свою функцию внутрь $ (Документ).ready