2015-05-09 22 views
0

這裏是我的代碼:dcNewForm.xhtml如何在顯示對話框時調用JavaScript函數?

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:ui="http://java.sun.com/jsf/facelets" 
     xmlns:p="http://primefaces.org/ui"> 
<ui:composition> 
    <h:panelGrid id="dcNewView"> 
      <h:outputText value="Address" styleClass="arianeDialogLabel"/> 
      <p:inputTextarea id="newDCaddress" styleClass="arianeDialogInputTitle" label="Description" required="true" autoResize="false" style="resize:none" value="#{datacenterNewController.address}"/> 
    </h:panelGrid> 

    <script type="application/javascript"> 
     var addresstxtarea = document.getElementById("createDCDialogForm:newDCaddress"); 
     function initialize() { 
      // body 
     } 
     window.onload = function(){ 
      initialize(); 
     } 
    </script> 
</ui:composition> 
</html> 

<html> 
 
    <p:dialog header="Create a new datacenter" widgetVar="dcCreateDialog"> 
 
     <h:form id="createDCDialogForm"> 
 
     <ui:insert name="createDatacenter" > 
 
      <ui:include src="/templates/dcNewForm.xhtml" /> 
 
     </ui:insert> 
 
     <p:commandButton value="Save this datacenter" oncomplete="dcCreateDialog.hide();"/> 
 
     </h:form> 
 
    </p:dialog> 
 
<html>

現在我呼籲的window.onload初始化方法。但是,當我呼籲從另一個對話框創建相同的對話框時,我得到TypeError:a爲空。 據我瞭解initialize()正在調用,但無法獲得document.ElementById(blahblah)。所以我只想在加載panelGrid或創建對話框時調用initialize方法。如何實現這一目標?

+0

應該不是你的主題/標題是_How呼叫JavaScript函數onload事件?_並且你從文檔中談論onload ...?因爲所有的答案都是這樣的,但是我認爲你希望在顯示面板或對話框時使用它。 – Kukeltje

+0

是的。我只需要在創建對話框時調用javascript方法。 – Sagar

+0

請創建一個簡約的例子,沒有所有的谷歌地圖的東西,只是一個簡單的mcve用例,請參見[問] – Kukeltje

回答

-1

使用document.onLoad或body.onLoad。在文檔準備好之前調用Window.onLoad。

+0

不符合要求 – Kukeltje

+0

在此代碼中,OP調用window.onload = function()並接收錯誤。如果使用document.onload而不是window.onload,問題就會解決。 –

+0

好吧,部分。由於對英語語言知識的限制,它被制定爲一種嗯...... OP表示它現在在window.onload上完成,但是如果OP對/在/對話框上執行相同的操作,則會出現錯誤。是的,document.onload是更好的,因爲一切都加載了,但最後一句OP寫道,它應該只在對話框顯示時調用 – Kukeltje

-1

如果你不想使用jQuery(這有它的$(document).ready()),你可以這樣做:

document.addEventListener("DOMContentLoaded", function(event) { 
    myInitializeFunction(); 
}); 

function myInitializeFunction() { 
    // do what you want to do 
} 

瀏覽器,只要所有的HTML被加載和解析打響「DOMContentLoaded」事件。

可以找到jQuery版本here

+0

不符合要求 – Kukeltje

-1

對於對話框中,使用昂秀屬性作爲可以在PrimeFaces文檔

<p:dialog ... onShow="initialize()" ...> 

面板上有沒有這樣的attibute中可以看出據我所知

+0

對不起,我不是這方面的專家,但對話框正在實例化從另一個文件。我如何調用初始化方法。 – Sagar

+0

看到我對mcve的其他評論。您發佈代碼,我們對其發表評論 – Kukeltje

+0

已發佈代碼。在第二個代碼片段中,我正在實例化對話框。我的問題是如何在第二個片段中調用初始化方法,而在dcNewFrom.xhtml中定義initialize()。 – Sagar

相關問題