我已经使用jQuery已经有好几年了,在我将jQuery脚本包含在我正在处理的任何网站之后,我总是将$
用于jQuery对象。例如:
$('#my_selector').click(function(){...
几年前我在Joomla 1.6中建立了一个网站,其中包含200多页,几乎所有这些网站都使用了jQuery,所有这些都使用了$
。现在我正在重建Joomla 3.3.0中的网站。有趣的是,现在有时候$
在识别jQuery对象时不起作用,但是当我使用jQuery
时,它可以正常工作。例如。上面的代码示例必须更改为:
jQuery('#my_selector').click(function(){...
这很有效。最奇怪的是,在一个页面上,似乎$
适用于某些jQuery但不是全部。我看到的错误就是这个错误:
TypeError: undefined is not a function
似乎问题主要发生在运行after load complete
情况的函数上。无论如何,我只是想知道那里的人是否知道为什么$
将停止识别jQuery函数和对象。
谢谢!
答案 0 :(得分:7)
您最有可能使用冲突库,这意味着:另一个声明(并因此覆盖)变量$
的脚本/库。将所有代码包装在一个闭包中,你应该很好:
(function($) {
$('#my_selector').doStuff();
})(jQuery)
或者,如果需要在文档就绪后执行:
jQuery(document).ready(function($) {
$('#my_selector').doStuff();
});
答案 1 :(得分:1)
您或joomla使用mootools或任何其他库$
吗?
这意味着存在冲突并且解决问题的正确方法是使用jQuery
代替$
。
答案 2 :(得分:1)
Joomla 3.x正在逐步转向jQuery,并在此过程中替换所有MooTools依赖项。
默认状态是在jQuery
模式下加载noConflict()
,但取决于扩展程序(templates
,plug-ins
,{{1}在任何给定页面上使用的功能}或components
)也可以加载MooTools。
这意味着在某些网页上,modules
已定义,而非jQuery
,而在其他网页上均已定义,显然这会导致您遇到的问题。
加上1.6时代的大多数第三方扩展(你一直在升级到2.5.x线路吗?)只是忽略了发生的事情并加载了他们需要的东西(可能会吹走其他东西)图书馆)你通常必须首先解决所有的冲突。
使用jQuery的唯一保证方法是使用$
前缀。
你可以阅读using JavaScript frameworks with Joomla here,除此之外,它还为你提供了Joomla为加载jQuery而内置的未来证明机制。
要加载jQuery,请使用:jQuery
加载jQuery UI核心调用:JHtml::_('jquery.framework');
如前所述,您可以将JavaScript包装在一个闭包中,实际上这就是JHtml::_('jquery.ui');
com_banners
所做的事情。
/media/cbanner.js