Javascript $未在新网站中为jQuery工作
我已经使用jQuery好几年了,在我将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对象。例如:
$('#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()文档中的其他示例。是否可以围绕所有这些函数创建一个闭包?是否仍然可以从全局范围调用函数?