2015-05-09 2 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 имеет значение null. Поскольку я понял, что initialize() получает вызов, но не может получить document.ElementById (blahblah). поэтому я хочу вызвать метод инициализации только при загрузке панели Panel или создании диалога. Как достичь этого?

+0

не Если ваш предмет/название будет _How вызвать JavaScript функция на событии onload? _ и вы говорите о onload ... из документа? Потому что это все ответы, но я думаю, что вы хотите иметь его при отображении панели или диалога? – Kukeltje

+0

Да, правильно. Мне нужно вызвать метод javascript только при создании диалога. – Sagar

+0

Pleasecreate минималистичный пример, без всяких картографических материалов Google, просто простой mcve usecase, см. [Ask] – Kukeltje

ответ

-1

Используйте document.onLoad или body.onLoad. Window.onLoad перед тем, как документ будет готов.

+0

Не в соответствии с запросом – Kukeltje

+0

В этом коде OP call window.onload = function() и получает ошибку. Если вы используете document.onload вместо window.onload, проблема будет решена. –

+0

Ну, частично. Из-за ограниченного знания английского языка формулируется вид hmmm .... OP утверждает, что теперь это делается на window.onload, но если OP делает то же самое для/with/on Dialog, возникает ошибка. Да, document.onload лучше, поскольку все загружено, но в последнем предложении OP пишет, что он должен быть вызван только при отображении диалогового окна – Kukeltje

-1

Если вы не хотите использовать JQuery (который имеет это $(document).ready()), вы можете сделать это:

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

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

браузер запускает «DOMContentLoaded» событие, как только будет загружен весь HTML и разобран.

JQuery-Version можно найти here.

+0

Не соответствует тому, что было задано – Kukeltje

-1

Для диалога, используйте OnShow атрибут, как можно увидеть в документации PrimeFaces

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

панель не имеет такой атрибут объявления AFAIK

+0

Извините, я не эксперт в этом, но диалог получает экземпляр из другого файла. Как вызвать метод инициализации. – Sagar

+0

Смотрите мой другой комментарий на mcve. Вы отправляете код, мы прокомментируем его – Kukeltje

+0

Код отправлен. Во втором фрагменте кода я создаю диалог. Мой вопрос: Как вызвать метод инициализации во втором фрагменте, тогда как initialize() определен в dcNewFrom.xhtml. – Sagar