如何在Main页面中调用Onload函数以及@include文件inner.jsp页面

时间:2010-06-04 23:10:14

标签: javascript html jsp jspinclude

我有两个页面,一个是主页面,另一个是内页面:

页面名称:main.jsp,sidebar.jsp 我想在这两个页面上调用onload函数。那可能吗。如果是,如何?

以下是 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方法,该方法属于主.jsp页面的onload()事件,而setSelected()属于sidebar.jsp的onload()方法,同时且单独地。

我知道我可以调用setSelected(); prepopulateFields()方法内部的方法,但我不想这样做。我想要的只是在加载页面时,应分别调用onload函数。

如果您有任何建议,请告诉我们! 我知道我在这里有点荒谬,但如果我能做到这一点我的工作将非常轻松。

5 个答案:

答案 0 :(得分:1)

我认为你不能调用多个onload函数。 最好的方法是从已经调用的函数

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

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



</body>

答案 1 :(得分:0)

您无法嵌套HTML <body>元素,它只会导致HTML格式错误。

最好将其作为<script>放在sidebar.jsp底部

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

答案 2 :(得分:0)

如果你使用firebug来检查main.jsp的渲染html页面。你会看到只有一个&lt; body&gt; 元素。 &lt; sidebar.jsp中的body&gt; 元素未呈现,因为它会在包含的jsp中将HTML格式错误为html or body not allowed

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

解决方案是:

  1. 如果始终加载sidebar.jsp,则将setSelected()放入main.jsp body onload事件中;
  2. 或按照BalusC的建议行事。

答案 3 :(得分:0)

window.onload = codeAddress;应该管用。这是一个演示。完整的代码:

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

答案 4 :(得分:0)

将类定义放在父jsp中,并在include中实例化所需的onloads。

<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>