dave: Themenbereich: IE;

Beitrag lesen

Hi,

folgendes im IE8:

<!DOCTYPE html>  
<html lang="en">  
	<head>  
		<title></title>  
		<style type="text/css">  
[code lang=css]		.addClass~#foo,  
		div {  
			height:0;  
			overflow:hidden;  
		}  
		#foo,  
		div.addClass {  
			height:auto;  
		}
	</style>  
</head>  
<body>  
	<script type="text/javascript">  
			var old="foo";  
			function classChanger(id){  
				if(document.getElementById(old))  
					document.getElementById(old).className="";  
				if(document.getElementById(id))  
					document.getElementById(id).className="addClass";  
				old = id;  
				return false;  
			}  
			  
			window.attachEvent("onload",function(){  
			  
				var hashHandler = function(e){  
					classChanger(location.hash.substr(1));  
				};  
				window.attachEvent("onhashchange",hashHandler);  
			});
	</script>  
	<ul>  
		<li><a href="" onclick="classChanger('foo');return false;">direkt: foo</a></li>  
		<li><a href="" onclick="classChanger('bar');return false;">direkt: bar</a></li>  
		<li><a href="" onclick="classChanger('baz');return false;">direkt: baz</a></li>  
	</ul>  
	<ul>  
		<li><a href="#foo">hashchange: foo</a></li>  
		<li><a href="#bar">hashchange: bar</a></li>  
		<li><a href="#baz">hashchange: baz</a></li>  
	</ul>  
	<div id="bar">  
		<h1>bar</h1>  
	</div>  
	<div id="baz">  
		<h1>baz</h1>  
	</div>  
	<div id="foo">  
		<h1>foo</h1>  
	</div>  
</body>  

</html>[/code]

Es sind zweimal drei Links.
Die ersten drei Links rufen die Javascript-Funktion direkt auf in der eine Klasse gesetzt wird die im CSS verwendet wird.
Klappt supi!

Die zweiten drei Links machen im Prinzip das gleiche nur über den Hash.
onhashchange ist ein Handler der die Funktion aufruft.
Wenn ich hier erst auf "foo" klicke, dann auf "bar" wird [id=foo] immer noch angezeigt.
Der Selektor ".addClass~#foo" der dann greifen müsste tut das nicht.

Das Problem ist nachdem es das erste mal aufgetaucht ist auch bei den "Links" die direkt die Funktion aufrufen...

Warum?

Bitte helft mir.

~dave