当jQuery与prototype.js一起使用时,jQuery.noConflict()修复不起作用

时间:2010-11-09 05:24:27

标签: prototypejs javascript jquery

早些时候问了一个问题并得到了很好的回答,你们真是太棒了。现在的问题是如何正确实施解决方案。

我正在尝试使用jQuery和原型库,使用jQuery.noConfict()修复:

<script src="./js/prototype.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

   <script>

     jQuery.noConflict();

  // Use jQuery via jQuery(...)
 jQuery(document).ready(function(){
   jQuery("slideshow1").hide();
 });

 // Use Prototype with $(...), etc.
 $('#lightbox').hide();
   </script>

<script type="text/javascript" src="./js/lightbox.js"></script>
<script type="text/javascript" src="./js/scriptaculous.js"></script>


<script type="text/javascript" src="http://malsup.github.com/chili-1.7.pack.js"></script>
<script type="text/javascript" src="http://cloud.github.com/downloads/malsup/cycle/jquery.cycle.lite.1.0.min.js"></script>

<script type="text/javascript">

$(function() {
    $('#slideshow1').cycle({
        delay: 2000,
        speed: 1000,
    });


});

</script>

我理解这个原则(默认情况下,jQuery使用“$”作为“jQuery”的快捷方式),对此的解决方案看起来应该可行。但是,实施后,页面会显示为空白背景。

This is a demo of the page, using the current script implementation.

如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

嗯,首先,你不正确地链接prototype.js。它应该是./js/prototype.js

修改
还缺少其他一些:./ js / dradrop.js ./js/controls.js ./js/slider.js

然后,看起来你正在使用jQuery而不是原型(但是,我没有任何原型经验)。我在他们的网站上查找了你并将id传递给$()函数,而不是css-like / jQuery选择器。因此,如果您拥有$("#slideshow1").hide();,则必须将其设为jQuery("#slideshow1").hide();$("slideshow1").hide();,如果它是原型函数。对于页面下的其他脚本,情况也是如此。

编辑2
修复丢失的JavaScript文件后,此行:$('slideshow1').hide();应为jQuery('#slideshow1').hide();

这些:

$(function() {
    $('#slideshow1').cycle({
        delay: 2000,
        speed: 1000,
    });
});

应该是:

jQuery(function() {
    jQuery('#slideshow1').cycle({
        delay: 2000,
        speed: 1000,
    });
});

答案 1 :(得分:0)

我认为Prototype会像jQuery那样执行$(id),而不是$(selector)。它还返回实际的DOM元素。所以例如我认为$('#slideshow1').hide()会在原型中$('slideshow1').style.visibility = 'hidden'。对于这样的事情,jQuery会更容易。看起来所有的$()调用都是jQuery()调用,并且需要重写Prototype方式才能工作 - 或者只是将$更改为jQuery。

编辑:实际上,$甚至不是原型......原型是$$