Problem mit eventlistener (JS)

Master Flexi

Mitglied
Hi Jungs,

folgendes Problem. Beim laden eines divs solle eine JavaScript funktion aufgerufen werden(automatisch).
Per Google habe ich eine Lösung gefunden:

Code:
   var div = document.getElementById ('activation');
   if (div.addEventListener)  div.addEventListener ("load", alerts(),false);
   else if (div.attachEvent)  div.attachEvent ("onload", alerts());
   else  div['onload'] = alerts();

mein Div hat die id activation und die funktion die aufgerufen werden soll ist "alerts"
Das interessante im IE funktioniert es nur so halb und es kommt eine Fehlermeldung "Typkonflikt".
Im Firefox funktioniert es einwandfrei...
Ich habe gelesen, dass der addEvenetListener nur für FF und nicht für IE ist, Der attachEvent läuft nur im IE...
Es scheint so als gäbe es Probleme beim Aufruf der Funktion. Was kann da der falsche Typ sein?

Besten Dank
Liebe Grüße
MF
 
Hi,

den Listener-Methoden wird die Handlerfunktion als Objekt, nicht als Funktion übergeben - soll heissen, die Klammern werden nicht notiert.
Code:
   if (div.addEventListener)  div.addEventListener ("load", alerts,false);
   else if (div.attachEvent)  div.attachEvent ("onload", alerts);
   else  div['onload'] = alerts;
Ciao
Quaese
 
Hi Quaese,

danke für deine Antwort.
Wenn ich allerdings keine Klammern setzte, sagt der Debugger "Objekt erforderlich", obwohl die Funktion "alerts" eigentlich gar kein Objektt braucht:
Code:
function alerts(){
   var div5=document.getElementById('activation');
   div5.style.visibility='visible';
Was kann das sein?

Liebe Grüße
MF
 
Hi,

das Problem dürfte sein, dass du einem Element einen load-Listener zuweisen willst, das noch gar nicht existiert. Ansprechen kannst du dieses erst, nachdem das Dokument geladen wurde, also im load-Event.

Soll heissen, du kannst den gewünschten Listener erst im load-Event zuweisen. Dann ist jedoch das gewünschte Ereignis bereit eingetreten und feuert nicht ein zweites Mal.

Als Lösung könntest du die Funktion alerts im onload-Event aufrufen.
Code:
window.onload = function(){
  alerts();
}

Ciao
Quaese
 
Hi Quaese,

vielen Dank für deine Antwort.

Ich weiß nicht genau an welche Stelle ich das
Code:
window.onload = function(){
  alerts();
}
schreiben soll.

Wenn ich es so schreibe:
Code:
window.onload = function(){
  	alerts();
	}
var div = document.getElementById ('activation');
if (div.addEventListener)  div.addEventListener ("load", alerts,false);
else if (div.attachEvent)  div.attachEvent ("onload", alerts);
else  div['onload'] = alerts;
sagt er immer "Objekt?"

Könntest du vielleicht nochmal ins Detail gehen, ich raff' das noch nicht so ganz :-)

Besten Dank
MF
 
Hi,

die ganze Geschichte mit dem Registrieren der Listener kannst du rausnehmen. Wie im Post vorher bereits ausgeführt, versuchst du dort einen Event-Handler für das onload-Ereignis zu registrieren, wenn dieses bereits eingetreten war.

Du könntest zwar die Listener im onload-Ereignis selbst registrieren. Das wäre jedoch unsinnig, da du auf einen Event warten würdest, der nicht mehr eintreten würde.

Mit meinem Vorschlag könnte es wie folgt aussehen:
Code:
<html>
<head>
<title>www.tutorials.de</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
  <!--
function alerts(){
   var div5=document.getElementById('activation');
   div5.style.visibility='visible';
}

window.onload = function(){
  alerts();
}
 //-->
</script>
</head>
<body>
<div id="activation" style="width: 100px; height: 100px; border: 1px solid #000; visibility: hidden;">Hallo Welt (sichtbar)</div>
</body>
</html>

Ciao
Quaese
 
Hi Quaese,

beziehst du dich mit diesem Code nicht aber darauf, dass meine Funktion bei Laden der Seite aufgerufen wird?
Ich wollte doch, dass meine Funktion alerts erst aufgerufen wird, wenn der DIV-Container "activation" vollständig geladen ist.
Oder geht das so auch? Würde für mich unsinnig klingen ?

Liebe Grüße und Dank,
MF
 
Hi,

das onload-Ereignis tritt ein, wenn das Dokument fertig geladen ist. D.h. das DOM ist vollständig und alle sonstigen Quellen sind geladen (Bilder, Scripts usw.). Zu diesem Zeitpunkt ist auch dein DIV existent und kann manipuliert werden.

Im Übrigen ist der onload-Event nach den Spezifikationen des W3C in HTML 4 nur in den Elementen body und frameset erlaubt (www.w3.org).

Ciao
Quaese
 
Hi Quaese und auch alle anderen,

danke für deine Antwort.
Also es ist halt so, dass die Funktion alerts() noch einige andere DIVs sichtbar macht.
Und nur wenn das DIV activation geladen ist, sollen die anderen erscheinen.
Mein Dokument ist dynamisch und das DIV activation wird daher nicht immer geladen. Es ist halt manchmal einfach nicht da.
Wenn ich nun mit dem von dir genannten CODE arbeite, dann erscheinen meine anderen DIVs immer, da sie nur auf hidden gesetzt sind und im Gegensatz zum activation DIV immer da sind.
Ich hoffe ich habe mich verständlich ausgedrückt.
Daher habe ich auch die Lösung mit dem eventlistener wählen wollen, da dort nur meine Funktion alerts() aufgerufen wird, wenn man DIV activation vorhanden ist.
Aber wieso genau mein eventlistener nicht funktioniert, das kann ich nicht verstehen.

Vielleicht habt ihr ja noch eine Idee :-)

Liebe Grüße und besten Dank
MF
 
Hi,

mach doch das gewünschte Vorgehen davon abhängig, ob das DIV activation existiert.
Code:
function alerts(){
  // Falls das DIV mit der ID "activation" existiert
  if(document.getElementById("activation")){
    var div5 = document.getElementById('activation');
    div5.style.visibility='visible';

     // ToDo: Weiterer abhängiger Code
  }
}

Ciao
Quaese
 

Neue Beiträge

Zurück