37

我正在使用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 中做这个实现。

4

6 回答 6

59

如果您使用的是旧版本的 jQuery,则可能会出现问题。因为旧版本的 jQuery 有 'live' 方法而不是 'on'

于 2013-12-19T07:07:39.593 回答
31

造成这种情况的通常原因是您使用了 Prototype、MooTools 或其他一些使用该$符号的库,并且您在 jQuery 之后包含了该库,因此该库“获胜”($为自己) . 所以 的返回值$不是一个 jQuery 实例,所以它上面没有 jQuery 方法(比如on)。

您可以将 jQuery 与其他库一起使用,但如果这样做,则必须使用jQuery符号而不是其别名$,例如:

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

通常最好在script包含 jQuery 的标签之后,在包含另一个库的标签之前添加它:

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

...尽管如果您在 jQuery 之后加载另一个库,则不需要(如果您先加载另一个库)。

但是,仅就页面重量而言,在同一页面上使用多个全功能 DOM 操作库并不理想。因此,如果您可以只使用 Prototype/MooTools/whatever 或只使用 jQuery,那通常会更好。

于 2013-03-27T22:06:04.827 回答
12

在我的情况下,这个问题通过将我的 jQuery 封装在:

(function($) {
//my jquery 
})(jQuery);
于 2015-07-16T11:47:42.513 回答
4

如果您使用的是旧版本的 jQuery(< 1.7),那么您可以使用“bind”而不是“on”。这仅适用于您使用旧版本的情况,因为从 jQuery 3.0 开始,“绑定”已被弃用。

于 2017-06-16T13:32:27.977 回答
0

就我而言,这段代码解决了我的错误:

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

你不应该把你的功能放在 $(document).ready

于 2019-08-16T23:53:47.200 回答
0

我尝试了奥斯卡(和许多其他人)的解决方案,但对我来说它最终只适用于:

jQuery(function($){
   // Your jQuery code here, using the $
});

请参阅:https ://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/

于 2017-08-17T15:42:38.103 回答