Javascript in JSP, welche per include-Befehl in ein andere geladen wird

schlseb

Mitglied
Hallo allerseits,
ich habe folgendes Problem:
Ich würde gerne die Höhe eines div Abschnitts so anpassen, dass die Rahmenelemente drum herum genau die Höhe des Frames ausfüllen. Da mir keine andere Lösung dafür eingefallen ist, wie ich das umsetzen kann, habe ich es mal mit JavaScript probiert, bin aber noch Anfänger. Ich habe den Code der JSP mit dem Script mal im folgenden dargestellt:
HTML:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Ausf&uuml;hrliche Auswertung ihrer Antworten</title>
<style type="text/css">
<!--
	body {font-family: "Arial, sans-serif";}
-->
</style>
<script language="javascript" type="text/javascript">
<!--
	
	
//-->
</script>
</head>
<body>
<%@ page import="quiz.AuswertungClass"  import="quiz.Detailangabe"%>
<%!	Detailangabe detail;
	String[] riAntw;
	String[] faAntw;
	String[] feAntw;%>
<%	AuswertungClass auswertung = (AuswertungClass)session.getAttribute("auswertung"); %>
<div style="height: 100%">
<script language="javascript" type="text/javascript">
<!--
	var ua = navigator.userAgent;
	var height;
	if(ua.indexOf("MSIE") >=0) {
  		height = screen.availHeight - 148 - 329; 
  		//Kopf und Fußzeile des IE7 sind zusammen genau 148 Pixel hoch
	}else {
  		height = window.innerHeight - 329;
	}
	document.getElementById("innerDiv").style.height = ''+height+''+"px";
	alert("Ich sollte "+height+" Pixel hoch sein!");
//-->
</script>
<table border="0" cellpadding="7" bgcolor="<%//#DDE7FC %>">
	<col width="25">
	<col width="100%">
	<col width="25">
	<tr>
		<td rowspan="3">&nbsp;</td>
		<td  id="thead" align="center"><font size="6">Ihre Ergebnisse im Einzelnen:</td>
		<td rowspan="3">&nbsp;</td>
	</tr>
	<tr>
		<td>
		<div id="innerDiv" style="overflow: auto; border-top: 2px solid #999999; border-bottom: 2px solid #999999">
		<% 	while (auswertung.nextDetail()) { 
				detail = auswertung.gibDetail();%> &nbsp;
		<table border="1" width="100%" cellpadding="5" bgcolor="#FFFFFF">
			<tr>
				<th align="left"><%=detail.getFragenNr() %>. Frage:</th>
				<!--    ID = <%=detail.getFragenID() %>  -->
				<th>Kategorie: <%=detail.getKategorie() %></th>
				<th>Punkte: <%=detail.getPkteStand() %></th>
				<th>Frage wurde zu <%=detail.getFragenStatistik() %> richtig
				beantwortet</th>
			</tr>
			<tr>
				<td colspan="4">
				<p><strong><%=detail.getFrage() %></strong></p>
				</td>
			</tr>
			<tr>
				<td colspan="4"><font color="#00ff00"><strong>Richtige
				Antworten:</strong>
				<ul type="disc">
					<% 	riAntw = detail.getRichtigeAntw();
					for (int i=0; i<riAntw.length; i++) {%>
					<li><%=riAntw[i] %><br>
					&nbsp;</li>
					<%	} %>
				</ul>
				</font></td>
			</tr>
			<tr>
				<td colspan="4"><font color="#ff0000"><strong>Falsche
				Antworten:</strong>
				<ul type="disc">
					<% 	faAntw = detail.getFalscheAntw();
					for (int i=0; i<faAntw.length; i++) {%>
					<li><%=faAntw[i] %><br>
					&nbsp;</li>
					<%	} %>
				</ul>
				</font></td>
			</tr>
			<tr>
				<td colspan="4"><font color="#0000ff"><strong>Richtige,
				jedoch nicht gew&auml;hlte Antworten:</strong>
				<ul type="disc">
					<% 	feAntw = detail.getFehlendeAntw();
					for (int i=0; i<feAntw.length; i++) {%>
					<li><%=feAntw[i] %><br>
					&nbsp;</li>
					<%	} %>
				</ul>
				</font></td>
			</tr>
		</table>
		&nbsp; <% 	} %>
		</div>
		</td>
	</tr>
	<tr>
		<td align="center" valign="top" height="40" >
		<a href="Quiz?tg=uebersicht">&Uuml;bersicht</a></td>
	</tr>
</table>
</div>
</body>
</html>
Jetzt ist es aber so, dass ich diese JSP in einer anderen per <jsp:include> lade und meine Vermutung ist, dass das Script dabei irgendwie nicht mehr ausgeführt wird. Den Alert habe ich nur zu Testzwecken eingebaut und nicht mal der erscheint beim aufrufen der Seite. Im übrigen ist die Tabelle so lang als hätte ich eben keine Höhe vorgegeben.

Falls nun irgendjemand Erfahrung mit sowas hat, ne Idee wie ich das noch anders realisieren könnte oder doch nen Fehler in meinem Script findet wäre ich dankbar für jeden Rat.
 
Hi,

wenn das Script ausgeführt wird, existiert das Element mit der ID innerDiv noch nicht, da es im Dokument
erst später eingebunden wird.

Zwei Lösungsmöglichkeiten:
Entweder weist du die Höhe im onload-Event zu
Code:
	var ua = navigator.userAgent;
	var height;
	if(ua.indexOf("MSIE") >=0) {
  		height = screen.availHeight - 148 - 329; 
  		//Kopf und Fußzeile des IE7 sind zusammen genau 148 Pixel hoch
	}else {
  		height = window.innerHeight - 329;
	}
        window.onload = function(){
	  document.getElementById("innerDiv").style.height = ''+height+''+"px";
        }
oder du führst das Script erst aus, nachdem das Element eingebunden wurde - dh. der Script-Bereich wird nach der Tabelle ins Dokument eingefügt.

Vielleicht hilft dir das weiter.

Ciao
Quaese
 
Hallo Quaese,
danke erstmal für die schnelle Antwort. Ich werds auf jeden Fall mal versuchen, aber müsste dann nicht wenigstens der Alert angezeigt werden?
 
Hi,
dein Tipp hat tatsächlich geholfen, vielen dank dafür! Mir ist nur noch immer nicht klar, warum nicht wenigstens der Alert an der alten Stelle ausgelöst wurde. Würde mich freuen, wenn du mir darauf auch noch ne Antwort wüsstest.
Gruß schlseb
 
Hi,

es kommt nicht zum alert, da in der Zeile zuvor ein Fehler auftritt. Durch diesen wird die weitere Ausführung des Scripts abgebrochen.

Ciao
Quaese
 
Zurück