【发布时间】:2011-11-04 16:38:23
【问题描述】:
我正在加载嵌入到 RichFaces 中的 jQuery:
<a4j:loadScript src="resource://jquery.js"/>
接下来,我正在加载 FancyBox jQuery 插件:
<script type="text/javascript" src="/App/fancybox/jquery.fancybox-1.3.4.pack.js"/>
第一次加载页面时插件可以正常工作,但是在执行 ajax 调用之后
<a4j:jsFunction name="myMethod" data="#{myController.jsonDataToReturn}" action="#{myController.doSomething()}" oncomplete="populateData(data);">
<a4j:actionparam name="selectedTag" assignTo="#{myController.selectedTag}"/>
</a4j:jsFunction>
插件停止工作。测试表明,a4j:loadScript 标记在每次 ajax 调用时都会重新加载,从而重新加载丢失附加插件的 jQuery 变量。
当前的解决方法是通过在页面某处放置<rich:jQuery query="fn" /> 标记来加载jQuery。它除了强制 jQuery 加载之外什么都不做,但是因为它不使用 a4j,所以 jQuery 不会在 ajax 调用时重新加载。
不过,有没有一个干净的解决方案?我正在使用包含 jQuery 1.3.2 的 RichFaces 3.3.3。
更新:
FancyBox 已加载:
jQuery(document).ready( function(){
jQuery('.fancyboxLink').live('click',aclick);
});
function aclick(){
jQuery.fancybox({
href: '#{facesContext.externalContext.requestContextPath}/webpage.xhtml',
type:'iframe',
width:710,
height:510,
padding:0,
margin:0,
hideOnOverlayClick:false,
overlayColor:'#000'
});
return false;
}
在第一次 ajax 调用之后,jQuery 不再包含 fancybox。
【问题讨论】:
-
显示你对元素的fancybox调用
标签: javascript jquery ajax richfaces ajax4jsf