Cómo llamar a la función Onload en la página principal, así como la página de archivo @include inner.jsp

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

Pregunta

Tengo dos páginas una es la página principal y la otra es la página interior:

Nombres de la página: Main.jsp, SideBar.jsp Quiero llamar a la función Onload en ambas páginas. Es eso posible. Si es así, ¿cómo?

A continuación se muestra el código para 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>

La barra lateral.jsp es:

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

Entonces, básicamente, quiero que llame al método de prepoblefields () JavaScript que pertenece al evento Onload () de la página .jsp principal y setSelected () que pertenece al método Onload () de la barra lateral.jsp simulatney y por separado.

Sé que puedo llamar al setSelected (); Método dentro del método PrepoPulateFields () pero que no quiero hacer. Todo lo que quiero es que cuando la página esté cargada, ambas funciones de carga deben llamarse por separado.

Si tiene algunas sugerencias, ¡hágamelo saber! Sé que estoy siendo un poco ridículo aquí, pero si pudiera hacer eso, mi trabajo será muy fácil.

¿Fue útil?

Solución

No creo que puedas llamar a más de una función de encendido. La mejor manera es llamar al método desde la función ya llamada

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

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



</body>

Otros consejos

No puedes anidar html <body> elementos, solo formaría HTML.

Lo mejor es ponerlo como un <script> en el abajo de sidebar.jsp.

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

Si usa Firebug para inspeccionar la página HTML renderizada de Main.jsp. Verías que solo hay un <body> elemento. los <Body> El elemento en tu barra lateral.jsp es no renderizado ya que mal formará html como html o cuerpo no permitido En JSP incluido.

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

La solucion es:

  1. Pon tu evento setSelected () en Main.jsp Body Onload Event si la barra lateral.jsp siempre se carga;
  2. o hacer lo que sugirió Balusc.

Window.Onload = CodeAddress; Deberia trabajar. Aquí hay una demostración. Y el código completo:

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

Ponga la definición de clase en el JSP de los padres e instancíe tantas actividades como necesite en las incluye.

<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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top