【问题标题】:Uncaught TypeError: Cannot call method 'dropit' of null未捕获的类型错误:无法调用 null 的方法“dropit”
【发布时间】:2014-01-11 12:13:38
【问题描述】:

我正在尝试在您登录后在标题中为“我的帐户”添加一个 jquery 下拉列表(尝试用户名 test 和密码 test@123),但我不断收到此错误:

未捕获的类型错误:无法调用 null 的方法 'dropit'

我什至搬家了:

    <script type="text/javascript">
    jQuery.noConflict();
    jQuery(document).ready(function () { 
$('#myaccountmenu').dropit();
});
</script>

到底部之前的页脚,无济于事。有什么想法吗?

【问题讨论】:

  • 您的页面上是否有元素#myaccountmenu?
  • @user 正如 Jessica 所要求的,确保该元素确实存在。 # 表示具有 id="myaccountmenu" 属性的元素,它不能是类。
  • dropitjQuery 插件吗?我问是因为如果您调用jQuery.noConflict(),很可能是因为页面上有另一个库使用$ 作为速记。如果dropit 是一个jQuery 插件,那么你需要写jQuery('#myaccountmenu').dropit(); 因为$ 引用另一个库。

标签: php jquery html css magento


【解决方案1】:

首先,您正在调用jQuery.noConflict(),它会释放对全局$ 变量的引用。您必须使用 jQuery 或其他变量来访问 jQuery 对象。

<script type="text/javascript">
    jQuery.noConflict();
    jQuery(document).ready(function () { 
        jQuery('#myaccountmenu').dropit();
    });
</script>

其次,我查看了您正在处理的页面,并进行了搜索,没有 ID 为 "myaccountmenu" 的元素。要么你有错误的 ID,要么元素必须在其他地方动态生成。如果是这种情况,您需要确保您的代码在元素创建后运行。

【讨论】:

    【解决方案2】:

    现在我有时间查看您的页面。 正如我在评论中已经提到的,您的页面上加载了另一个库(prototype),它使用$。 因为 prototype 是在调用 noConflict 的 jQuery 版本之前加载的,所以 $ 会恢复为 prototype

    所以你需要把它改成jQuery('#myaccountmenu').dropit();

    但是仅仅改变这个不会让你的代码运行,你会得到一个错误dropit is not defined,因为你加载了两个 jQuery 版本。 prototype(1.8.0 版本)之前的一个插件注册到的位置,然后是1.9.1(您实际上加载了两次)。这将覆盖插件注册到的1.8.0 版本。

    使用不同的库会导致内存泄漏。多次加载 jQuery(即使是同一版本)也会导致内存泄漏以及意外行为(无法正确传播的事件,...)

    【讨论】:

      猜你喜欢
      • 2012-09-07
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多