Подтвердить что ты не робот

TypeError: $(...). 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.

4b9b3361

Ответ 1

Проблема может быть, если вы используете более старую версию jQuery. Поскольку более старые версии jQuery имеют "живой" метод вместо 'on'

Ответ 2

Обычная причина этого в том, что вы также используете Prototype, MooTools или какую-либо другую библиотеку, которая использует символ $, и вы включаете эту библиотеку после jQuery, и поэтому библиотека "выигрывает" "(взяв $ для себя). Таким образом, возвращаемое значение $ не является экземпляром jQuery, поэтому на нем нет методов jQuery (например, on).

Вы можете использовать jQuery с этими другими библиотеками, но если вы это сделаете, вы должны использовать символ jQuery, а не его псевдоним $, например:

jQuery('body').on(...);

И обычно это лучше всего, если вы добавите это сразу после тэга script, включая jQuery, перед тем, как включить в него другую библиотеку:

<script>jQuery.noConflict();</script>

... хотя это не требуется, если вы загружаете другую библиотеку после jQuery (это если вы сначала загружаете другую библиотеку).

Использование нескольких полнофункциональных библиотек DOM-манипуляций на одной странице не является идеальным, хотя и с точки зрения веса страницы. Поэтому, если вы можете использовать только Prototype/MooTools/все или только jQuery, это обычно лучше.

Ответ 3

Эта проблема решена, в моем случае, путем инкапсуляции моего jQuery в:

(function($) {
//my jquery 
})(jQuery);

Ответ 4

Если вы используете старую версию jQuery (< 1.7), вы можете использовать "bind" вместо "on". Это будет работать только в том случае, если вы используете старую версию, поскольку с jQuery 3.0 "bind" устарел.

Ответ 6

В моем случае этот код решил мою ошибку:

(function (window, document, $) {
            'use strict';
             var $html = $('html');
             $('input[name="myiCheck"]').on('ifClicked', function (event) {
             alert("You clicked " + this.value);
             });
})(window, document, jQuery);

Вы не должны помещать свою функцию внутрь  $ (Документ).ready