【问题标题】:debugging jquery conflict调试jquery冲突
【发布时间】:2012-03-06 22:40:38
【问题描述】:

我有一个基于 Joomla 的网站。 Joomla 使用 mootools,而大多数扩展使用 jquery。我有一个在 Joomla 中使用的模板,我的注册页面似乎有问题。如果我更改我的模板,一切正常。

我相信这是我使用的 yootheme 模板上的一些搜索猜测的 jquery 冲突。我没有从模板创建者那里得到任何东西。

Firebug 不显示任何内容。关于如何在此处调试任何问题的任何提示?

【问题讨论】:

  • 你能给我们更多的信息吗?期望的行为是什么以及正在发生什么?
  • 注册期间不进行验证。例如,访问者可以在不选择服务条款复选框的情况下进入。正确的行为是禁止注册。或者另一个例子,密码不匹配、电子邮件不匹配、密码强度等。
  • 听起来是时候使用很多 console.log()s

标签: jquery joomla


【解决方案1】:

这是一个命名空间问题。 mootools 和 jquery(除了原来的jQuery())对其选择器使用相同的$()-named 函数。在同一个站点上使用两者,一个会冲突另一个。但是,由于 mootools 是 Joomla 的原生工具,并且您的 jQuery 是“访问者”框架,因此您可以使用 .noConflict() 函数更改 jQuery 的命名空间。

//future uses of jQuery will use "j" instead of "$"
//i think you can still use the original "jQuery()" also
var j = jQuery.noConflict();

//instead of:
$("selector");

//now you use:
j("selector");

//or
jQuery("selector");

在你加载你的jQuery之后声明.noConflict(),但是在Joomla的mootools脚本之前加载这两个。此外,无论插件中有什么 jQuery 脚本,请确保将它们的 $() 更改为您更改的命名空间,或 jQuery()

【讨论】:

  • 感谢您的回复。事实上,我确实将它用于我的所有自定义代码。但是在这种情况下,我一直在调试此模板中的代码。他们确实加载了一个单独的 noconflict.js 文件,但我不能确定这是否涵盖了它。所以我正在寻找的是关于如何进一步调试的提示。
  • YooTheme 构建了非常可靠的模板。如果他们构建的模板以这种方式失败,我会感到惊讶。您更有可能安装了导致冲突的附加组件(可能是模块)。切换模板可能会偶然解决此问题 - 例如,具有冲突的模块可能会发布到备用模板中不存在的位置,因此模块不会输出并且不会发生冲突。链接将提供最快的帮助。
  • 这就是我停止使用 Joomla 的原因。使用繁重的 CMS 和捆绑功能创建一个 frankenstein 网站对用户来说是一件很麻烦的事,对开发人员来说更麻烦。如果要满足可扩展性,Joomla 不应该使用外部框架,而应该使用自己的框架。
  • @DeanMarshall 我也很惊讶 yootheme 会有这个问题,但是切换模板确实可以解决这个问题。我希望我可以提供一个链接,但这是一个开发站点。我会尝试查看模块,但我觉得我已经把所有东西都记下来了,只留下了模板。
  • 如果是 jQuery Mootools 冲突,我希望在 javascript 控制台和 web 开发工具栏的图标中看到一种或另一种 javascript 错误。尝试验证您的 html,我已经看到严重损坏的 html 会破坏 javascript 功能而不会导致 js 错误。
猜你喜欢
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 2017-01-28
  • 2011-10-28
相关资源
最近更新 更多