2010-06-04 5 views
0

J'ai deux pages une est la page principale et une autre est la page intérieure:Comment appeler la fonction Onload dans la page principale, ainsi que la page inner.jsp fichier @include

noms Page: main.jsp , sidebar.jsp Je souhaite appeler la fonction onload sur ces deux pages. Est-ce possible. Si oui Comment?

est Ci-dessous le code pour main.jsp:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<%@ include file="/pages/common/init.jsp"%> 

<%@ taglib prefix="sx" uri="/struts-dojo-tags"%> 

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
<head> 
    <title>J.C. Taylor - Broker Website</title> 
    <meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
    <link rel="stylesheet" href="/css/default.css" media="screen" type="text/css" /> 
</head> 
<body onload="prepopulateFields();load(17);"> 

<s:form name="continue" id="continue_id" action="continue" method="POST" validate="true" enctype="multipart/form-data"> 
    <div id="wrapper"> 
     <div id="main"> 
       <div id="sidebar"> 
        <%@ include file="/pages/common/sidebar.jsp"%> 
        <span class="clearIt"></span> 
       </div> 

Le sidebar.jsp est:

<body onload="setSelected();"> 
//Some static content here 
</body> 

Alors Fondamentalement, je veux est d'appeler prepopulateFields() méthode Javascript qui appartient à Evénement onload() de la page principale .jsp et setSelected() qui appartient à la méthode onload() de sidebar.jsp symétriquement et séparément. Je sais que je peux appeler le setSelected(); méthode à l'intérieur de la méthode prepopulateFields() mais que je ne veux pas faire. Tout ce que je veux, c'est que lorsque la page est chargée, les fonctions onload doivent être appelées séparément.

Si vous avez des suggestions s'il vous plaît faites le moi savoir! Je sais que je suis un peu ridicule ici mais si je pouvais le faire Mon travail sera très facile.

Répondre

1

Je ne pense pas que vous pouvez appeler plus d'une fonction de chargement. meilleure façon est d'appeler la méthode de la fonction déjà appelé

function prepopulateFields(){ 
    if //condition which check the current page where you want other onload function 
     setSelected(); 
} 

<body onload="prepopulateFields();load(17);"> 



</body> 
0

Vous ne pouvez pas imbriquer des éléments HTML <body>, cela ne ferait que malformer le code HTML.

Le mieux est de le mettre comme <script> au en bas de sidebar.jsp.

<script type="text/javascript">setSelected()</script> 
+1

sera-t-il appelé lorsque la page est chargée? – Salil

+1

Les scripts en ligne seront exécutés immédiatement lorsque le navigateur l'analyse. C'est pourquoi il doit être placé en bas, * après * les éléments HTML où il est censé être intercepté. – BalusC

0

Si vous utilisez Firebug pour inspecter la page html rendu de main.jsp. Vous verriez il n'y a que un corps> élément. Le < corps> élément dans votre sidebar.jsp est pas rendu car il malformera HTML comme html or body not allowed en jsp inclus.

Be careful that the included file does not contain <html>, </html>, <body>, or </body> tags 

La solution est:

  1. soit mis votre setSelected() en main.jsp événement onload du corps si le sidebar.jsp est toujours chargé;
  2. ou faire comme BalusC suggéré.
0

window.onload = codeAddress; devrait marcher. Voici une démo. Et le code complet:

<script type="text/javascript"> 
function codeAddress() { 
    alert('ok'); 
} 
window.onload = codeAddress; 
</script> 
0

Mettez la définition de classe dans la jsp mère et instancier autant onloads que vous avez besoin dans includes.

<SCRIPT> 
    // this portion was placed above the Class definition for convenience. 
    // make sure the Class definition gets loaded first in your code. 

    new OnLoad(function(){ 
     alert("document loaded"); 
    },100); 

</SCRIPT> 
... 
<SCRIPT> 
     // Class Definition 
     OnLoad = function(taskFunction,miliseconds) { 
      var context = this; 
      context.cnt = 0; 
      context.id = null; 
      context.doTask=taskFunction; 
      context.interval = function() { 
       if(document.readyState == "complete"){ 
        try{ context.stop();} catch(e){ throw new Error("stop error: " + context.id); } 
        try{ context.doTask();} catch(e){ throw new Error("load error: " + context.id); } 
       } 
      }; 
      context.start = function(timing) { 
       if(context.id && context.id!=null) 
        context.stop(); 
       context.cnt=0; 
       context.id=setInterval(context.interval,timing); 
      }; 
      context.stop = function() { 
       var _id = context.id; 
       clearInterval(context.id); 
       context.id=null; 
      }; 
      context.start(miliseconds ? miliseconds : 100); 
     }; 
    </SCRIPT> 
Questions connexes