2012-01-25 93 views
17

我想在頁面加載後執行JavaScript函數。目前我有一個commandButton,一切正常。然而,如果用戶不應該按下按鈕,它會更舒服。如何在頁面加載後執行JavaScript?

我試過f:event,但是我沒有監聽器,我只有JavaScript函數。此外,身體負荷不適合我,因爲我只使用高級別組件。

<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在我master.xhtml

+0

你願意想這樣做的準備,而不是onload事件? –

+0

如果您的腳本在頭部並且按鈕位於頁面中,則該腳本將始終在元素出現之前加載。但是,如果腳本需要某些元素在頁面中,並且用戶可以在加載之前單擊該按鈕,則可能會禁用該按鈕(或採取其他操作)直到它們可用。 – RobG

+0

使用remoteCommand且autorun爲true。 – meyquel

回答

23

使用jQuery定義如下:

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

更新:

它必須是在<ui:define name="content">之內。

+0

它有什麼問題?爲什麼downvote? –

+2

處理'onload'事件的唯一目的不是一個好主意。 – bennedich

+2

這種情況很好,因爲他使用的是需要和加載jQuery本身的PrimeFaces。 –

4
window.onload = function() { 
    // code to execute here 
} 
+0

不適用於我。我把它放在腳本標籤中,並將它放在側面的不同位置,但沒有發生任何事情。 – steffan

3

對於我已成功地成功地使用下面的primefaces:通過使用

  1. 我在<head>加載包含我需要的onLoad的功能的JS文件:

    < h:outputScript library="javascript" name="nameOfMyFile.js" target="head"> 
    
  2. 爲了運行我需要從「nameOfMyFile.js」獲得的JS函數,我使用了以下代碼:

    < h:body onload="nameOfMyFunction()" > 
    
  3. 請注意,我的JS文件底部也包含以下命令:

    $(document).ready(nameOfMyFunction()); 
    

的3'rd點是運行函數onReady。這是一個實驗,看看我是否可以將HTML添加到日程安排事件中......因爲通過此處傳遞的字符串被解析並且html標記被轉義。我還沒有弄清楚爲什麼我需要onReadyonLoad ....但目前這是它爲我工作的唯一方法。如果我發現任何新東西,我會更新。 它成功了。

6

有2種方式是爲我工作,當我想在Primefaces執行頁面加載後,JS功能:

  • 要麼使用jQuery(因爲它已經由Primefaces),最好的辦法是嵌套文件。
    • jQuery(document).ready(function() { jQuery(document).ready(function() { // twice in document.ready to execute after Primefaces callbacks PathFinder.findAndGo(); }); });
  • 或使用號碼::準備好了兩次,讓我的JS代碼全部Primefaces代碼後執行remoteCommand與自動運行,和地方的onComplete它
    • JS回調這樣表單提交通過AJAX給服務器,但沒有在服務器端執行的監聽器,一個JS回調之後執行
    • <p:remoteCommand oncomplete=" PathFinder.findAndGo(); " autoRun="true"/>
+2

還有一個選項可以指示Primefaces從控制器中的Java代碼執行JS,但我不確定這是否在頁面加載後執行。我在AJAX動作中使用過這個選項,當我無法指示Primefaces在AJAX之後更新頁面標題時: 'org.primefaces.context.RequestContext.getCurrentInstance()。execute(「document.title ='」+ StringEscapeUtils.escapeEcmaScript (pageTitle)+「'」);' – OndrejM

0

包括(在頁面的底部)你<ui:define name="content">,然後內jQuery的庫使用$(document).ready像往常一樣:

<ui:define name="content"> 
 
... 
 
<!-- jQuery --> 
 
<h:outputScript name="vendor/jquery/jquery.min.js"/> 
 
<script> 
 
    $(document).ready(function(){ 
 
     alert(1); 
 
    }); 
 
</script> 
 
</ui:define>

相關問題