メインページでオンロード関数を呼び出す方法@includeファイルinner.jspページ
-
24-10-2019 - |
質問
2ページがメインページで、もう1つは内側のページです。
ページ名: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>
基本的に私は、sidebar.jsp simulatneallyおよび個別にsidebar.jspメソッドに属するメイン.jspページのonload()イベントに属するprepopulatefields()javascriptメソッドを呼び出すことです。
私はsetSelected()を呼び出すことができることを知っています。 PrepopuleFields()メソッド内のメソッドですが、やりたくないこと。私が望むのは、ページがロードされている場合、両方のオンロード関数を個別に呼び出す必要があることです。
いくつかの提案があれば、私に知らせてください!私はここで少しばかげていることを知っていますが、それができれば私の仕事はとても簡単です。
解決
複数のオンロード機能を呼び出すことはできないと思います。最良の方法は、すでに呼ばれる関数からメソッドを呼び出すことです
function prepopulateFields(){
if //condition which check the current page where you want other onload function
setSelected();
}
<body onload="prepopulateFields();load(17);">
</body>
他のヒント
HTMLをネストすることはできません <body>
要素、それはHTMLのみを奇形します。
最も良いことです <script>
で 下 の sidebar.jsp
.
<script type="text/javascript">setSelected()</script>
FireBugを使用して、main.jspのレンダリングされたHTMLページを検査する場合。あなたはそこにしかないでしょう 1つの<body> エレメント。 <body> SideBar.jspの要素はです レンダリングされていません htmlをasに奇形するので HTMLまたはボディは許可されていません 含まれているJSP。
Be careful that the included file does not contain <html>, </html>, <body>, or </body> tags
解決策は次のとおりです。
- SideBar.jspが常にロードされている場合、setSelected()をmain.jspボディオンロードイベントに入れます。
- または、Baluscが示唆したようにします。
window.onload = codeaddress;動作するはずです。これがデモです。そして完全なコード:
<script type="text/javascript">
function codeAddress() {
alert('ok');
}
window.onload = codeAddress;
</script>
親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>