【发布时间】:2011-12-03 21:51:41
【问题描述】:
<script src="jquery.js"></script>
<script>
var $jq = jQuery.noConflict();
$jq(document).ready(function(){
alert("123");
$jq("#redactor_content").redactor();
alert("456");
});
</script>
<script src="prototype.js"></script>
<script src="redactor.js"></script>
“redactor.js”是基于 JQuery 的 WYSIWYG 编辑器:http://imperavi.com/download/redactor/get/,来源:
...
(function($){
// Initialization
$.fn.redactor = function(options)
{ ... };
})(jQuery);
...
当我评论“prototype.js”时 - 一切正常(我看到“123456”)。
使用“prototype.js” - 仅查看“123”和“redactor”不起作用。 (这意味着命名空间工作正常,对吧?为什么第二个警报不起作用?)
当我只评论 $jq(document).ready(function(){ 并在调用之前移动“redactor.js”(调用“redactor()”而不等待 DOM) - 一切都很好。
我不明白原理。包含“jquery.js”后,我首先覆盖“$”,然后包含“prototype.js”以避免冲突。但是 Namespace Jquery 不知何故仍然与 Prototype 相交。我怀疑错误在这里的某个地方:$jq("#redactor_content").redactor();,我需要做类似的事情:.redactor($jq);,但它打破了我的头脑,我无法猜测。
PS: 是的,我阅读了文档(http://docs.jquery.com/Using_jQuery_with_Other_Libraries)并尝试了不同的方法(交换库并尝试$.noConflict、jQuery(document).ready...)。我写了一个例子,说明一切正常有点清晰。
我的第二个问题:它会一起工作吗:jQuery(document).ready(function() 和 Prototype 的document.observe("dom:loaded", function(),如果没有,如何一起工作?
谢谢。
【问题讨论】:
-
你有没有为你的代码尝试过这个结构(不是编辑器)(function($){ // Code... })(jQuery);
-
是的,我试图做类似的事情: 但我不记得结果是什么。只是不工作。
-
当你使用 "(function($){...})(jQuery);" 时,你不需要 "$(document).ready("。还要记住你必须在使用之前加载 redactor.js。所以正确的顺序是:jQuery、redactor、prototype、yout 脚本。
-
但是这个"$(document).ready("是要在DOM加载完之后执行的。如果我把它去掉,那就有不一样的意思了。
标签: jquery ajax prototypejs conflict