Comment appeler la fonction Onload dans la page principale, ainsi que le fichier @include page inner.jsp

StackOverflow https://stackoverflow.com/questions/2978341

Question

J'ai deux pages une est la page principale et une autre est la page intérieure:

Les noms de page: main.jsp, sidebar.jsp Je veux appeler la fonction onload sur ces deux pages. Est-ce possible. Si oui comment?

Voici le code 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>

En fait, je veux est d'appeler prepopulateFields () méthode Javascript qui appartient à onload () cas de la page principale .jsp et setSelected () qui appartient à la méthode onload () du sidebar.jsp symulatneously et séparément.

Je sais que je peux appeler la setSelected (); méthode dans la méthode prepopulateFields () mais que je ne veux pas faire. Tout ce que je veux est lorsque la page est chargée à la fois les fonctions onload doit être appelé séparément.

Si vous avez des suggestions, veuillez ne me le faire savoir! Je sais que je me fais peu ridicule ici, mais si je pouvais faire mon travail sera très facile.

Était-ce utile?

La solution

Je ne pense pas que vous pouvez appeler plus d'une fonction onload. 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>

Autres conseils

Vous ne pouvez pas imbriquer HTML éléments <body>, il ne ferait que malform HTML.

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

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

Si vous utilisez Firebug pour inspecter la page html rendu de main.jsp. Vous verriez il n'y a que un élément . dans votre sidebar.jsp est pas rendu car il sera malform HTML html ou un corps non autorisé jsp inclus.

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

La solution est:

  1. soit mettre votre setSelected () dans l'événement corps main.jsp onload si le sidebar.jsp est toujours chargé;
  2. ou faire comme le suggère BalusC.

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>

Mettre 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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top