kleines Firefox ok - IE macht nichts Problem

benchmark

Mitglied
Hey,

bin eher ein Flasher und kenne mich deshalb nicht so mit Javascript aus. Folgender Code funktioniert im FF, jedoch nicht im IE.
Meine Frage: was ist falsch?

PHP:
function init(){
        if(document.getElementById){
        obj = document.getElementById("menuDiv");
        obj.style.top = "-195px";
        }
}
Gesucht habe ich auch schon, aber irgendwie nichts passendes gefunden. :-(

Vielen Dank für die Hilfe,
benchmark
 
Hey,

folgendes habe ich in der Datei stehen:

Auszug:
PHP:
<style type="text/css">
<!--
#menuDiv
{
position:absolute;
left:198px;
top:-185px;
width:550px;
height:205px;
z-index:5;
text-align:right;
}
-->
</style>
<script type="text/javascript">
<!--
function init(){
        if(document.getElementById){
        obj = document.getElementById("menuDiv");
        obj.style.top = "-195px";
        }
}

function slideDown(){
        if(document.getElementById){
                if(parseInt(obj.style.top) < 1){
                        obj.style.top = parseInt(obj.style.top) + 10 + "px";
                        setTimeout("slideDown()",15);
                }        
        }
       
}

function slideUp(){
        if(document.getElementById){
                if(parseInt(obj.style.top) > -195){
                        obj.style.top = parseInt(obj.style.top) - 10 + "px";
                        setTimeout("slideUp()",15);
                }
        }
        
}
//-->
</script>
</head>
<body onload="init()" bgcolor="black">
<div id="menuDiv">
...
</div>
</body>
IE sagt immer "obj" wäre nicht definiert. Außerdem scheint die init() Funktion nicht mal anzulaufen, denn wenn ich den Layer per CSS versetze müßte die init() ihn ja wieder zur Ausgangsposition schieben. Passiert aber nicht. FF macht das und zeigt alles und macht alles!

Vielen Dank für die Hilfe.
benchmark
 
Hi,

und wenn du diese Funktion vor der init()-Funktion notierst?

Code:
function moveTo(obj, x, y) {
        if (document.getElementById) {
        document.getElementById('menuDiv').style.left = x + "px";
        document.getElementById('menuDiv').style.top = y + "px";
        }
}
 
Das wäre dann ein Copy/Paste Fehler gewesen. :-( Aber es ändert leider nichts daran, dass es im FF funktioniert, jedoch nicht im IE.

Da in diesem Layer ein Flashobjekt (wie könnte es anders sein) eingebettet ist, umgehe ich den IE "Flash Aktivierungs Klick" mit:
PHP:
<?php
  ob_start();
?>
...
<?php
  include_once "replaceObjEmbed.php";
  echo replaceObjEmbed(ob_get_clean());
?>
Ich hoffe jetzt nicht, dass es daran liegt. Der Quellcode des Browsers sieht dann folgendermaßen aus:
PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Unbenanntes Dokument</title>
</head>
<style type="text/css">
<!--
#menuDiv
{
position:absolute;
left:198px;
top:-185px;
width:550px;
height:205px;
z-index:5;
text-align:right;
}
-->
</style>
<script type="text/javascript">
<!--
function moveTo(obj, x, y) {
        if (document.getElementById) {
        document.getElementById('menuDiv').style.left = x + "px";
        document.getElementById('menuDiv').style.top = y + "px";
        }
}

function init(){
        if(document.getElementById){
        obj = document.getElementById("menuDiv");
        obj.style.top = "-195px";
        }
}

function slideDown(){
        if(document.getElementById){
                if(parseInt(obj.style.top) < 1){
                        obj.style.top = parseInt(obj.style.top) + 10 + "px";
                        setTimeout("slideDown()",15);
                }        
        }
       
}

function slideUp(){
        if(document.getElementById){
                if(parseInt(obj.style.top) > -195){
                        obj.style.top = parseInt(obj.style.top) - 10 + "px";
                        setTimeout("slideUp()",15);
                }
        }
        
}
//-->
</script>
<body onload="init()" bgcolor="black">
<div id="menuDiv">
<script src="./replaceObjEmbed.js" type="text/javascript"></script>
<script language="JavaScript">
<!--
var jsval = '<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" codebase=\"http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0\" width=\"550\" height=\"190\" id=\"X\" align=\"middle\"><param name=\"allowScriptAccess\" value=\"sameDomain\" /><param name=\"movie\" value=\"X.swf\" /><param name=\"quality\" value=\"high\" /><param name=\"bgcolor\" value=\"#000000\" /><embed src=\"X.swf\" quality=\"high\" bgcolor=\"#000000\" width=\"550\" height=\"190\" name=\"X\" align=\"middle\" allowScriptAccess=\"sameDomain\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" /></object>';
writethis(jsval);//-->
</script>
<noscript><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="550" height="190" id="X" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="X.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#000000" /><embed src="X.swf" quality="high" bgcolor="#000000" width="550" height="190" name="X" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object></noscript>
</div>
[...]
Na hoffentlich liegst nicht an dieser replaceObjEmbed.js.
 
Hallo,
ich hab mich jetzt nur kurz eingelesen, aber versuch mal die variable "obj"
vor den ganzen Javascript-Funktionen zu definieren:

HTML:
<script type="text/javascript">
<!--
var obj = null;
function moveTo(obj, x, y) {
        if (document.getElementById) {
        document.getElementById('menuDiv').style.left = x + "px";
        document.getElementById('menuDiv').style.top = y + "px";
        }
}

function init(){
        if(document.getElementById){
        obj = document.getElementById("menuDiv");
        obj.style.top = "-195px";
        }
}
 
Das hat folgendes bewirkt:

-FF: keine Änderung, alles funktioniert.
-IE: Die Fehler Ausgabe ist nun nicht mehr "'obj' ist nicht definiert" sondern "'obj.style' ist Null oder kein Objekt"

Aber danke für den Tipp MbHelm.:(
 
Bei mir haut das problemlos hin mit der globalen Variable:
Code:
<html>
<head>
<title>Test</title>
<style type="text/css">
<!--
#menuDiv
{
position:absolute;
left:198px;
top:-185px;
width:550px;
height:205px;
z-index:5;
text-align:right;
border:1px solid red;
}
-->
</style>
<script type="text/javascript">
<!--
var obj=false;
function init(){
        if(document.getElementById){
        obj = document.getElementById("menuDiv");
        obj.style.top = "-195px";
        }
}

function slideDown(){
        if(obj){
                if(parseInt(obj.style.top) < 1){
                        obj.style.top = parseInt(obj.style.top) + 10 + "px";
                        setTimeout("slideDown()",15);
                }        
        }
       
}

function slideUp(){
        if(obj){
                if(parseInt(obj.style.top) > -195){
                        obj.style.top = parseInt(obj.style.top) - 10 + "px";
                        setTimeout("slideUp()",15);
                }
        }
        
}
//-->
</script>
</head>
<body onload="init()" bgcolor="black">
<div id="menuDiv" onmouseover="slideDown()" onmouseout="slideUp()">
...
</div>
</body>
 
Mmmmh,

da muß ich dir recht geben. Ich habe das auch mal in eine simple File eingefügt und da ging es ohne Probleme.

Fragt sich jetzt nur woran es wirklich liegt. Der Code scheint jedenfalls doch 1A in Ordnung zu sein.

Nehme an, er kollidiert mit irgendeiner anderen Anweisung, vielleicht doch aufgrund des replaceObjects. :(

Ich muß wohl eine andere Lösung finden. Vielen Dank für die Hilfe. Jetzt weiß ich wenigstens, dass es nicht am Script liegt. Das ist ja schonmal was. :)

Einen schönen Abend noch.
benchmark
 

Neue Beiträge

Zurück