gpt4 book ai didi

javascript - Richfaces a4j :loadScript clears jQuery plugins on ajax calls

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:21:23 25 4
gpt4 key购买 nike

我正在加载嵌入到 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。

最佳答案

您需要做的第一件事是在每个 ajax 请求上加载脚本,为此使用 a4j:loadScript

<a4j:loadScript src="/App/fancybox/jquery.fancybox-1.3.4.pack.js"/>

第二:在重新呈现组件时执行该 fancybox 脚本(ajax 调用重新呈现包含 fancybox 元素的 dom 树的一部分)。我会通过编写一个自定义的 facelets 组件来做到这一点,就像这样。

花式输入.xhtml:

<ui:component xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:c="http://java.sun.com/jstl/core">

<a4j:loadScript src="resource:///App/fancybox/jquery.fancybox-1.3.4.pack.js"/>

<!-- id is passed by component's client as facelet param. -->
<h:commandButton id="#{id}" otherParameters="....."/>
<script type="text/javascript">
jQuery(function() {
// Attaching fancybox to rendered component.
jQuery($('#{rich:clientId(id)}')).live('click',aclick);
});
</script>
</ui:component>

你的页面:

<ui:include src="fancyInput.xhtml">
<ui:param name="id" value="anId"/>
<ui:param name="otherParams" value="..."/>
</ui:include>

关于javascript - Richfaces a4j :loadScript clears jQuery plugins on ajax calls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7207901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com