Javascript $未在新网站中为jQuery工作

Javascript $未在新网站中为jQuery工作,javascript,jquery,joomla,Javascript,Jquery,Joomla,我已经使用jQuery好几年了,在我将jQuery脚本包括在我正在工作的任何站点中之后,我总是将$用于jQuery对象。例如: $('#my_selector').click(function(){... 几年前,我在Joomla 1.6中建立了一个网站,有200多个页面,几乎所有页面都使用jQuery,所有页面都使用$。现在我正在Joomla 3.3.0中重建站点。有趣的是,有时识别jQuery对象时,$不起作用,但当我使用jQuery时,它就起作用了。例如上述代码示例必须更改为: jQue

我已经使用jQuery好几年了,在我将jQuery脚本包括在我正在工作的任何站点中之后,我总是将
$
用于jQuery对象。例如:

$('#my_selector').click(function(){...
几年前,我在Joomla 1.6中建立了一个网站,有200多个页面,几乎所有页面都使用jQuery,所有页面都使用
$
。现在我正在Joomla 3.3.0中重建站点。有趣的是,有时识别jQuery对象时,
$
不起作用,但当我使用
jQuery
时,它就起作用了。例如上述代码示例必须更改为:

jQuery('#my_selector').click(function(){...
这就行了。最后一件最奇怪的事情是,在一个页面上,
$
似乎适用于部分jQuery,但并非所有jQuery。我看到的错误是:

TypeError: undefined is not a function
问题似乎主要发生在加载完成后运行的函数上。无论如何,我只是想知道人们是否知道为什么
$
会停止识别jQuery函数和对象


谢谢

您很可能使用了一个冲突的库,这意味着:另一个脚本/库声明(并因此重写)变量
$
。将您的所有代码封装在一个闭包中,您应该做得很好:

(function($) {
    $('#my_selector').doStuff();
})(jQuery)
或者,如果需要在文件准备就绪后执行:

jQuery(document).ready(function($) {
    $('#my_selector').doStuff();
});

您或joomla是否正在使用mootools或任何其他带有
$
的库


这意味着存在冲突,解决冲突的正确方法是使用
jQuery
而不是
$

Joomla 3.x正在逐步转向jQuery并替换所有MooTools依赖项

默认状态是在
noConflict()
模式下加载
jQuery
,但根据扩展(
模板
插件
组件
模块
)在任何给定页面上使用的功能,也可以加载MooTools

这意味着在某些页面上,定义了
jQuery
,而不是
$
,在其他页面上,这显然会导致您看到的问题

除此之外,1.6时代的大多数第三方扩展(您一直在升级到2.5.x版本,对吗?)都忽略了曾经发生的事情并加载了他们需要的任何东西(可能会破坏其他库),通常您必须首先解决所有冲突

使用jQuery的唯一保证方法是使用
jQuery
前缀

您可以了解到,它为您提供了Joomla内置的用于加载jQuery的未来验证机制

要加载jQuery,请使用:
JHtml::(('jQuery.framework')

加载jqueryui核心调用:
JHtml::(('jQuery.UI')

如前所述,您可以将JavaScript封装在一个闭包中,事实上这就是
/media/cbanner.js

var jQuery;
    (function ($) {
        $(document).ready(function () {
            $('#jform_type').on('change', function (a, params) {
                var v = typeof(params) !== 'object' ? $('#jform_type').val() : params.selected;
                switch (v) {
                case '0':
                    // Image
                    $('#image, #url').show();
                    $('#custom').hide();
                    break;
                case '1':
                    // Custom
                    $('#image, #url').hide();
                    $('#custom').show();
                    break;
                }
            });
        });
    })(jQuery);

您是否在同一页中多次引用jquery?这很可能是因为,这导致未定义
$
。这是因为BCO与其他库存在某种冲突吗?您是否在使用jquery的同时使用其他库?@jeffery\u它用来停止将
$
定义为jquery的风,以便(从科学角度)实现此目的使用其他使用
$
的库。giorgio的闭包很好,还可以查看jQuery.noconflict()文档中的其他示例。是否可以围绕所有这些函数创建一个闭包?是否仍然可以从全局范围调用函数?