当我尝试初始化jQuery插件时,为什么会出现这些未捕获的类型错误?

时间:2013-02-06 03:18:48

标签: javascript jquery jquery-plugins initialization typeerror

无法弄清楚这些未捕获的类型错误?我只是想使用一个简单的jQuery计数器插件...我网站上的其他插件工作正常: - /

错误:

Uncaught TypeError: Cannot set property 'counter' of undefined
Uncaught TypeError: Object [object Object] has no method 'counter' 

在我的页面上,我有这样的跨度:

<span class="counter counter-analog2" data-direction="up" data-format="23:59:59.9" data-stop="00:00:10.0" data-interval="100">0:00.0</span>

我已经加入了jQuery插件&amp; css文件ABOVE我在哪里初始化它们:

<script type="text/javascript" src="/templates/ja_wall/js/jquery.counter.js"></script>
<link rel="stylesheet" href="/templates/ja_wall/css/jquery.counter-analog2.css" type="text/css" media="all" />

然后在我的jQuery文档准备好了(代码中的插件比插件中的更低)我初始化计数器插件,如下所示:

$('.main_counter').counter({}); 

我完全陷入困境......也许它与jQuery需要无冲突模式有关?任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:1)

看起来还有另一个库覆盖了$变量。

counter插件实现似乎遇到了一些问题。在jQuery中 插件开发通常的做法是不直接使用$变量,而是使用jQuery变量并使用自执行匿名函数来注入它。

在您的情况下,一个解决方案可以是更改jquery.counter.js中的以下行

!(function (context, definition) {
  if (typeof define == 'function' && typeof define.amd  == 'object') define(['jquery'], definition);
  else definition(context['$']);
}(this, function ($) {

!(function (context, definition) {
  if (typeof define == 'function' && typeof define.amd  == 'object') define(['jquery'], definition);
  else definition(jQuery);
}(this, function ($) {

您同时使用jQuerymootools都使用$变量来访问核心引擎。由于您首先包含了mootools库而jQuery第二,因此jQuery会覆盖$变量,但对jQuery.noConflict()的任何调用都将恢复初始值。

在您的情况下,k2.noConflict.js文件正在调用var $K2 = jQuery.noConflict();,它会替换$的原始值mootools

由于您已调用jQuery.noConflict() $变量将指向mootools,因此如果您想要访问jQuery,则需要使用变量jQuery$K2。< / p>

编写插件的正常方法是

(function($){
    $.fn.x=function(){
        ..... 
    };
})(jQuery);

答案 1 :(得分:0)

看起来插件没有正确初始化。

尝试推杆 $.noConflict(); 在你开始你的插件之前?

相关问题