Как вызвать функцию Onload на главной странице, а также на странице @include file inner.jsp - PullRequest
0 голосов
/ 05 июня 2010

У меня есть две страницы, одна из которых является главной страницей, а другая - внутренней страницей:

Имена страниц: main.jsp, sidebar.jsp Я хочу вызвать функцию загрузки на обеих этих страницах. Это возможно. Если да, то как?

Ниже приведен код для 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>

Sidebar.jsp:

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

Так что в основном я хочу вызвать метод prepopulateFields () Javascript, который относится к событию onload () главной страницы .jsp, и setSelected (), который принадлежит к методу onload () в sidebar.jsp, по отдельности и по отдельности.

Я знаю, что могу вызвать setSelected (); метод внутри метода prepopulateFields (), но я не хочу этого делать. Все, что я хочу, это когда страница загружена, обе функции загрузки должны вызываться отдельно.

Если у вас есть предложения, пожалуйста, дайте мне знать! Я знаю, что здесь немного смешно, но если бы я мог это сделать, моя работа была бы очень легкой.

Ответы [ 5 ]

1 голос
/ 05 июня 2010

Я не думаю, что вы можете вызвать более одной функции загрузки. лучший способ - вызвать метод из уже вызванной функции

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

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



</body>
0 голосов
/ 11 апреля 2014

Поместите определение класса в родительский jsp и создайте столько включений, сколько вам нужно во включениях.

<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>
0 голосов
/ 08 февраля 2013

window.onload = codeAddress; должно сработать. Вот демо. И полный код:

<script type="text/javascript">
function codeAddress() {
    alert('ok');
}
window.onload = codeAddress;
</script>
0 голосов
/ 17 августа 2012

Если вы используете firebug для проверки визуализированной html-страницы main.jsp. Вы увидите, что есть только один элемент . Элемент в вашем sidebar.jsp не отображается , поскольку он будет искажать HTML как html или тело не будет разрешено во включенном jsp.

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

Решение:

  1. либо поместите ваш setSelected () в событие onload тела main.jsp, если sidebar.jsp всегда загружен;
  2. или сделайте, как предложил BalusC.
0 голосов
/ 05 июня 2010

Вы не можете вложить элементы HTML <body>, это приведет только к неправильному отображению HTML.

Лучше всего поставить его как <script> на дне из sidebar.jsp.

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