$不适用于新网站中的jQuery

时间:2014-06-24 12:22:12

标签: javascript jquery joomla

我已经使用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函数和对象。

谢谢!

3 个答案:

答案 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(),但取决于扩展程序(templatesplug-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