Siri: Eventhandler - Prinzip verstanden?

Hallo,

hier mein Miniframework:

var Test3 = (function () {		  
  
	var oldWinOnLoad = false;				  
  
	// Oldfashioned!  
	(function () {  
		oldWinOnLoad = window.onload;		  
		window.onload = function () {			  
			if( typeof (oldWinOnLoad) == 'function' ) {  
				oldWinOnLoad();  
			}							  
			init();			  
		}			  
		  
	})();  
	  
	function init() {  
		  
		// Eventhandler registrieren  
		var classAElements = document.getElementsByClassName('classa');		  
		for (var i= 0; i < classAElements.length; i++) {  
			var myClassAHandler = new ClassAHandler(i);  
			ClassAHandler[i].addEventListener("click", myClassAHandler.methode1,  false);	  
			ClassAHandler[i].addEventListener("mouseover", myClassAHandler.methode2,  false);									  
		}  
		  
	};					  
	  
	// ==============================  
	function ClassAHandler (param1) {  
	  
		var param1 = param1  
  
		this.methode1 = function() {			  
			alert(param1);						  
		}			  
		  
		this.methode2 = function() {			  
			alert("methode2");						  
		}					  
  
	}  
		  
})();	

Hab ich das Prinzip so richtig verstanden? ein Objekt erzeugen und es dann mittels addEventListener an ein bestimmtes Element hängen?

Grüße
Siri

PS: Das die Autostartmethode "oldfashioned" ist, weiß ich!

  1. hi,

    Hallo,

    hier mein Miniframework:

    [code lang=javascript]var Test3 = (function () {

    warum var Test3 = ???

    brauchst Du Test3? Erhält Test3 einen Wert?

    Warum erzeugst Du einen neue window.onload-Funktion?

    mfg

    tami

    1. Hallo,

      warum var Test3 = ???
      brauchst Du Test3? Erhält Test3 einen Wert?

      Der Code ist nur ein Auszug. Es ist auch ein

      return {  
         ...  
      }
      

      enthalten, in dem ich "öffentliche" Methoden platziere.

      Warum erzeugst Du einen neue window.onload-Funktion?

      init() wird dann gestartet, wenn die Seite geladen ist, dass es besseres gibt, weiß ich, aber zum Testen ist es schön kompakt.

      Grüße
      Siri

  2. Hallo,

    Hab ich das Prinzip so richtig verstanden? ein Objekt erzeugen und es dann mittels addEventListener an ein bestimmtes Element hängen?

    Grundsätzlich ja, aber

      var classAElements = document.getElementsByClassName('classa');		  
      for (var i= 0; i < classAElements.length; i++) {  
      	var myClassAHandler = new ClassAHandler(i);  
      	ClassAHandler[i].addEventListener("click", myClassAHandler.methode1,  false);	  
      	ClassAHandler[i].addEventListener("mouseover", myClassAHandler.methode2,  false);									  
      }  
    

    Wo wird denn das Array ClassAHandler initialisiert? Ich glaube du wolltest da eher classAElements[i].addEventListener() machen.

    Jeena

    1. Hallo,

      Wo wird denn das Array ClassAHandler initialisiert? Ich glaube du wolltest da eher classAElements[i].addEventListener() machen.

      Da hast Du 100% Recht! Danke!

      Grüße
      Siri

  3. (function () {
    oldWinOnLoad = window.onload;
    window.onload = function () {
    if( typeof (oldWinOnLoad) == 'function' ) {
    oldWinOnLoad();
    }
    init();
    }

    })();

    die unsinnige Kapselung hast du immer noch nicht entfernt

    function ClassAHandler (param1) {

      var param1 = param1  
    

    wozu soll das gut sein? param1 ist ein übergabeparameter und damit eine lokale Variable in deinem scope.

    1. Hallo,

      (function () {  
        oldWinOnLoad = window.onload;		  
        window.onload = function () {			  
        	if( typeof (oldWinOnLoad) == 'function' ) {  
        		oldWinOnLoad();  
        	}							  
        	init();			  
        }			  
          
      })();  
      

      die unsinnige Kapselung hast du immer noch nicht entfernt

      Das ist keine unsinnige Kapselung! Es geht immer noch darum Eventhandler zu registrieren, wenn die Seite geladen ist.

      Grüße
      Siri

      1. Das ist keine unsinnige Kapselung!

        dann erkläre mir mal, was du da kapselst!

        Es geht immer noch darum Eventhandler zu registrieren, wenn die Seite geladen ist.

        Ja und? Das ich das nicht gut finde, habe ich dir bereits mitgeteilt, aber es funktioniert auch ohne eine Kapselung die nichts kapselt!

        1. Das ist keine unsinnige Kapselung!
          dann erkläre mir mal, was du da kapselst!

          Das erkläre ich dir nicht noch 100x. Alles relevante steht hier, hier und hier.

          Es geht immer noch darum Eventhandler zu registrieren, wenn die Seite geladen ist.
          Ja und? Das ich das nicht gut finde, habe ich dir bereits mitgeteilt,...

          Ob du das gut findes oder nicht ist doch wurscht, du musst doch nicht damit arbeiten, ich mache mein Framework für meine Seite.

      2. Hallo Siri,

        ... Kapselung! ...

        Ein Problem, dass man auch hier im Forum immer wieder beobachten kann, kommt dadurch zustande, dass Scripte mit globalen Variablen arbeiten und sich so gegenseitig die Werte überschreiben. Eine Abhilfe ist, die Scripte zu kapseln. So sind Sie von anderen Scripten aus nicht mehr zu erreichen. Eine Alternative wäre, die Scripte und ihre Variablen in einen eigenen Namensraum zu legen, also so etwas wie XXX.Wert = 42; . So hat man nur noch eine globale Variable, kann aber von außen auf das Script zugreifen.

        Allerdings hast du in deinem Entwurf eine Kapselung in einer Kapselung. Oder übersehe ich da etwas?

        Außerdem solltest du deinen Entwurf mal in verschiedenen Browsern testen, "addEventListener" unterstützen nicht alle Browser. Hier habe ich dir bereits eine mögliche Alternative gezeigt.

        Gruß, Jürgen

        1. Allerdings hast du in deinem Entwurf eine Kapselung in einer Kapselung. Oder übersehe ich da etwas?

          Selbst dagegen würde nicht direkt etwas sprechen, wenn man innerhalb etwas vor anderen Funktionen verstecken möchte.
          Nur hier ist nichts was gekapselt wird!