Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
页面加载后如何执行JavaScript?_Javascript_Jsf 2_Primefaces_Onload - Fatal编程技术网

页面加载后如何执行JavaScript?

页面加载后如何执行JavaScript?,javascript,jsf-2,primefaces,onload,Javascript,Jsf 2,Primefaces,Onload,我想在页面加载后执行JavaScript函数。目前我有一个commandButton,一切正常。但是,如果用户不应该按下按钮,则会更舒适 我尝试过f:event,但我没有侦听器,我只有JavaScript函数。此外,body onload对我不起作用,因为我只使用高级组件 <f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces

我想在页面加载后执行JavaScript函数。目前我有一个commandButton,一切正常。但是,如果用户不应该按下按钮,则会更舒适

我尝试过f:event,但我没有侦听器,我只有JavaScript函数。此外,body onload对我不起作用,因为我只使用高级组件

<f:view xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:pm="http://primefaces.org/mobile" contentType="text/html">

<ui:composition template="/resources/master.xhtml">

    <ui:define name="content">


        <pm:content>

            <h:inputHidden id="address" value="#{pathFinderBean.address}" />

            <div id="map" style="width: 100%; height: 285px;"></div>

             <p:commandButton type="button" value="Route" onclick="PathFinder.findAndGo()"/>

            <div id="route"></div>

        </pm:content>
    </ui:define>

</ui:composition>


JavaScript函数PathFinder.findAndGo在my master中定义。xhtml使用JQuery如下:

<script>
    jQuery(document).ready(function() {
        PathFinder.findAndGo();
    });
</script>

jQuery(文档).ready(函数(){
PathFinder.findAndGo();
});
更新:


它必须在

范围内。对于primefaces,我已成功地使用了以下各项:

  • 我已经加载了JS文件,其中包含我需要的函数,我使用以下方法加载:

    < h:outputScript library="javascript" name="nameOfMyFile.js" target="head">
    
  • 第三点用于运行函数
    onReady
    。这都是一个实验,看看我是否可以添加HTML到日程事件。。。传递字符串时,会对其进行解析,并转义html标记。我还没有弄清楚为什么我需要
    onReady
    onLoad
    。。。。但目前这是我唯一的办法。如果我发现任何新的东西,我会更新。
    这是成功的。

    当我想在Primefaces中加载页面后执行JS函数时,有两种方法适合我:

    • 或者使用jQuery(因为Primefaces已经使用它),最好的解决方案是嵌套document.ready两次,这样我的JS代码在所有Primefaces代码之后执行:
      • jQuery(文档).ready(函数(){
        jQuery(文档).ready(函数(){
        //在document.ready中执行两次,可在Primefaces回调后执行
        PathFinder.findAndGo();
        });
        });
    • 或者将p:remoteCommand与自动运行一起使用,并将oncomplete JS回调放在其上
      • 这种方式表单由AJAX提交到服务器,但服务器端不执行侦听器,之后执行JS回调
    中包含(在页面底部)jQuery库,然后使用
    $(文档)。像往常一样准备好:

    
    ...
    $(文档).ready(函数(){
    警报(1);
    });
    
    使用OndrejM远程命令的第二个选项,但在输出面板内,通过添加
    deferred=“true”
    deferredMode=“load”
    配置为在页面加载后加载:

    
    
    jQuery仅用于处理
    onload
    事件不是一个好主意。这种情况下很好,因为他使用的PrimeFaces需要并加载jQuery本身。我还将它放在了某个地方。。。在我的页面上,但未执行任何操作。是否希望在就绪状态下而不是在加载状态下执行此操作?如果脚本位于页眉,且按钮位于页面中,则脚本将始终在元素出现之前加载。但是,如果脚本要求页面中包含某些元素,并且用户可以在加载这些元素之前单击该按钮,则您可能会禁用该按钮(或采取其他操作),直到它们可用为止。使用remoteCommand和autorun true。对我不起作用。我将它放在脚本标签中,并将它放在侧面的不同位置,但什么也没有发生。还有一个选项指示Primefaces从controller中的Java代码执行JS,但我不确定这是否在页面加载后执行。我曾在AJAX操作中使用过此选项,当时我无法指示Primefaces在AJAX之后更新页面标题:
    org.Primefaces.context.RequestContext.getCurrentInstance().execute(“document.title=”“+StringEscapeUtils.escapeEcmaScript(pageTitle)+“”
    
    < h:outputScript library="javascript" name="nameOfMyFile.js" target="head">
    
    < h:body onload="nameOfMyFunction()" >
    
    $(document).ready(nameOfMyFunction());
    
    <p:outputPanel deferred="true" deferredMode="load" rendered="#{...}"> 
         <p:remoteCommand oncomplete="PathFinder.findAndGo();" autoRun="true" />
    </p:outputPanel>