TypeError:$(..).cycle不是JSF应用程序中的函数:jQuery循环



我想在JSF应用程序的一个页面中使用jquery循环。我包含jquery表单谷歌,我在本地主机上托管jquery.cycle.all.js文件,我还有另一个额外的js文件,其中包含我的jquery循环幻灯片脚本,我将这些文件分别包含在我的页面中。但是幻灯片放映不起作用。下面我包括firebug错误和我的代码:

我的xhtml页面:

<h:form>
<div>
<div id="view-slider" class="pics">
<img src="#{request.contextPath}/resources/images/1.jpg" width="400" height="200"/> 
<img src="#{request.contextPath}/resources/images/2.jpg" width="400" height="200"/>  
</div>
<ul id="thumbnails"></ul>
</div>
</h:form>
<br/>
<p:separator/>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" ></script> 
<h:outputScript name="js/jquery-cycle-all.js"/>
<h:outputScript name="js/view-slides.js"/> 

view-slides.js

$.fn.cycle.updateActivePagerLink = function(pager, currSlideIndex) {
$(pager).find('li').removeClass('activeLI')
.filter('li:eq('+currSlideIndex+')').addClass('activeLI');
};
$.fn.cycle.updateActivePagerLink = function(pager, currSlide, clsName) {
$(pager).each(function() {
console.log(clsName + '; ' + currSlide ); 
$(this).children().removeClass('activeLI').filter(':eq('+currSlide+')').addClass('activeLI');
});
};
$(function() {
$('#view-slider').cycle({
timeout: 3000,
pager:  '#thumbnails',
pagerAnchorBuilder: function(idx, slide) {
return '<li><a href="#"><img src="' + slide.src + '" width="50" height="50" /></a></li>';
}
});
});

Firebug错误:

TypeError: $(...).cycle is not a function
view-slides.js.xhtml (line 17)

到目前为止,我已经尝试了以下操作,但没有成功:

将我的脚本封装在一个函数中。检查了加载顺序,它应该是:jsf.js、jquery、jquery.cycle、view-slides.js在一个普通的html文件中测试了这个脚本,它成功了。

额外信息:我有一个模板,其中包括来自谷歌的相同版本的jquery.js文件,并有一个tabs.js脚本。这些也已加载,选项卡正在工作。我把这些也插入到我的html文件中,它运行得很好。我从我的xhtml文件中移除了jquery,因为我在模板中有它,它给了我jquery未找到的错误。

我不知道这是否是一个冲突的问题,如果是,它与什么冲突?

我感谢你的回复。

jQuery函数上的TypeError错误通常是由Web应用程序加载了重复的不同版本的jQuery JS文件引起的。PrimeFaces作为一个基于jQuery的JSF组件库,已经自动加载了jQuery。因此,您不需要通过<script>/<h:outputScript>在PrimeFaces之上手动加载另一个jQuery JS文件。如果删除它,那么这个错误应该会消失。

如果你碰巧有一个页面,你想使用一些jQuery,但页面本身没有使用任何PrimeFaces组件,因此不一定会自动加载PrimeFace捆绑的jQuery,那么你总是可以通过添加以下行来显式地自己加载它:

<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />

这将显式加载PrimeFaces库绑定的jQuery文件。注意:当target="head"已经在<h:head>内部时,可以省略它。否则,例如,当在模板客户端的<h:body><ui:define>内部时,它将自动重新定位到head。另一个注意事项是:您可以在实际需要PrimeFaces捆绑jQuery的页面中安全地使用此行。它不会以口是心非的方式结束。

最新更新