0

背景

我有一段 javascript 在客户页面上的站点。执行此脚本时,它会加载必要的资产和脚本,然后执行主代码。

我正在加载的脚本之一是Twitter 的引导 JS,用于创建模式窗口。它被实现为一个 jQuery 插件,并将 '$.modal()' 添加到一个 jquery 对象。

问题

这适用于除一个客户站点之外的所有站点。在这个特定的网站上,当我调用$('#idOfWindow').modal();时,页面会抛出一个 javascript 错误Object has no method 'modal'

我已经验证了引导代码被调用,并被$.fn.modal调用来设置插件,我的预感是某些东西正在破坏 jQuery 对象,但我不确定如何调试它。

评论

我目前正在使用 Chrome 的开发人员工具进行调试,并且我已经验证了该插件在被调用之前已加载并执行。客户端站点使用 jQuery 1.7.2。我熟悉 chrome 工具,但我不是高级用户。

4

3 回答 3

4

如果您是对的,您的原始 jQuery 对象正在某处被覆盖,您应该能够使用jQuery.noConflict().

演示: jsfiddle.net/KthZu


编辑:一些调试提示:

为了帮助调试,您可以使用以下代码在控制台中检查 jQuery 版本:

$().jquery

另一个潜在的调试技巧是在创建插件时存储对 jQuery 的引用。

$.fn.myPlugin = function(){};
window.jQueryWithMyPlugin = $;

然后,在调试的时候,就可以清楚的看到是否window.$被覆盖了:

$ === jQueryWithMyPlugin
于 2012-11-16T18:53:42.773 回答
1

通常对于要嵌入外部的任何小部件类型的代码,您都需要包装您的代码:

(function($){
    $('#idOfWindow').modal();
})(jQuery);
于 2012-11-16T19:01:49.797 回答
0

过去,我遇到过在同一页面上加载多个版本的 jQuery(或 jQuery 和原型)的问题。确保您添加的 jQuery$.fn.modal版本与正在调用的版本相同。$().jquery可以用来访问正在使用的特定版本的jQuery。

于 2012-11-16T18:52:32.320 回答