jQuery和JavaScript单脚本之间的冲突

时间:2013-02-18 20:14:54

标签: javascript jquery conflict

我在单个html页面中使用多个JS脚本和jquery。这些脚本包括滑块,粘滞菜单,阴影框以及最终的图像预览脚本。 这个图像预览脚本是让其他脚本失败的脚本,它可以单独使用。它是在body标签之后插入的简单代码。

以下是代码:

<script type="text/javascript">
//<![CDATA[
jQuery.noConflict();
(function(jQuery){  

jQuery('#first a').imgPreview();

})(jQuery);
//]]>
</script>

完整的HEAD代码:

<script src="js/jsapi.js" type="text/javascript"></script>
<script src="js/jquery.js" type="text/javascript"></script>
<script src="js/html5.js" type="text/javascript"></script>

<script type="text/javascript" src="js/easySlider1.7.js"></script>

<script type="text/javascript">
jQuery.noConflict();
    $(document).ready(function(){   
        $("#slider").easySlider({
            auto: true, 
            continuous: true
        });
    }); 
</script>

<script src="js/scroll.inicio.js"></script>
<script src="js/jquery.scrollTo.js"></script>
<script src="js/jquery.nav.js"></script>
<script>
$(document).ready(function() {
   $('#sticky').onePageNav({
changeHash: true
  });
});
</script>

<script type="text/javascript">
function sticky_relocate() {
  var window_top = $(window).scrollTop();
  var div_top = $('#sticky-anchor').offset().top;
  if (window_top > div_top)
    $('#sticky').addClass('stick')
  else
    $('#sticky').removeClass('stick');
  }
google.setOnLoadCallback(function() {
  $(window).scroll(sticky_relocate);
  sticky_relocate();
  });
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-        2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src;         x.src=a[i+2];}
    }
    </script>

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

<script src="js/imgpreview.full.jquery.js" type="text/javascript"></script>

<script type="text/javascript">Shadowbox.init({ overlayOpacity: 0.9 });</script>

控制台显示此3个错误

Uncaught TypeError: Cannot call method 'replace' of undefined imgpreview.full.jquery.js:58
Uncaught TypeError: Property '$' of object [object Window] is not a function index.html:21
Uncaught TypeError: Property '$' of object [object Window] is not a function index.html:49

我需要找到冲突的位置以及如何解决冲突。

非常感谢

1 个答案:

答案 0 :(得分:0)

这将失败:

jQuery.noConflict();
// script after this fails
$(document).ready(function(){   
    $("#slider").easySlider({
        auto: true, 
        continuous: true
    });
});

使用得当:

jQuery.noConflict();
// script after this fails
(function($){   
    $("#slider").easySlider({
        auto: true, 
        continuous: true
    });
})(jQuery);

正确使用也可能是:

jQuery.noConflict();
(function($){  
     $('#first a').imgPreview();
})(jQuery);
//other library code here...