IE: Zwei Events in Funktion

SimonErich

Erfahrenes Mitglied
Hi

ich hab folgendes Problem:
Ich hab mir eine Funktion geschrieben, die auf IE und Mozilla ein Event via attachEvent und AddEventListener einem Objekt ein Event "auferlegt".
hier mal der Code:
Code:
 function addEvent( object, eventType, func)
   {

      if(object.attachEvent)
         eval("object.attachEvent('on'+ eventType, "+ func +");");
      else if(object.addEventListener)
         eval("object.addEventListener(eventType, "+ func +", false);");
         		 
   }

Und nun wird das erste Event für ein Div festgelegt:
Code:
addEvent(document.getElementById("b"+buttonId), 'mousedown', 'startE');

Also bei Mausklick soll die Funktion "startE" ausgeführt werden. Dies funktioniert auch wunderbar im IE und Mozilla.
Die Funktion "startE" soll nun wiederrum 2 Events starten:

Code:
function startE(e)
 {
   addEvent(this, 'mousemove', 'displayE');
   addEvent(this, 'mouseup', 'stopE'); 
 }

Und ab hier gibts dann das Problem.
Im Firefox funktionierts ganz normal.
Im IE allerdings nicht mehr.
Ich hab versucht in die Funktion startE ein alert einzubauen und dieses wird von beiden Browsern angezeigt.
Dann hab ich es in die Funktion displayE eingebaut und da wurde es nicht mehr angezeigt, obwohl ich die Maus bewegt hab nachdem ich geklickt hab.

Hab ich hier einen Fehler oder an was könnte es sonst liegen ?


mfg SimonErich
 
Hi,

das Problem ist das this in der Funktion startE. Damit wird nämlich das window-Objekt angesprochen
und nicht wie von Dir erwartet das auslösende Element. Überprüfen kannst Du das z.B., indem Du dem
Fenster einen Namen zuweist
Code:
window.onload=function(){ window.name="DasFenster";}
und diesen in startE ausgeben lässt (alert(this.name)).

Zur Lösung könntest Du das auslösende Element des event-Objekts verwenden. Nach einer unterscheidung der Typen
wird es den weiteren Eventfunktionen übergeben.
Code:
function startE(objEvt){
  // IE, Opera
  if(window.event){
    objSrc = objEvt.srcElement;
  }else{
    objSrc = objEvt.target;
  }

   addEvent(objSrc, 'mousemove', 'displayE');
   addEvent(objSrc, 'mouseup', 'stopE');
}
Ciao
Quaese
 
Hi vielen dank.
displayE wird nun ausgeführ in beiden Browsern.
Nur wie spreche ich die style EIgenschaften von diesem Objekt an ?
Früher hab ich dies mit this.style.top gemacht, doch nun geht dies nicht mehr und hab ich zum Beispiel folgenden Code drinn:

Code:
function displayE( eventObject)
 {
   
    if(window.event)
        obj = eventObject.srcElement;
    else
        obj = eventObject.target;

   alert (obj.style.top);

 }
bekomm ich das einfach nur leer aus.
Hat wer eine Idee bzw. weiß rat ?
Das komisch ist, dass es in FF und in IE so ist

Gruß SimonErich
 
Hi,

schon mal versucht, nur obj.style mit alert auszugeben? Bei mir wird dann angezeigt, dass das
style-Objekt existiert. Die Eigenschaft top wird allerdings nur dann angezeigt, wenn sie vorher auch
definiert wurde.

Ciao
Quaese
 
Hi

Nein funtzte auch nicht, und es hatte einen top Wert.
Aber ich bin draufgekommen, was es war :)
Ich hatte immer das Object zum Kindelement, des eigentlich gewollten.

Deshalb hab ichs jetzt so gelöst:
Code:
		 // define object
		  if(window.event)
            obj = eventObject.srcElement.parentNode;
          else
            obj = eventObject.target.parentNode;

Falls es eine bessere Methode gibt bitte hier posten :)

Danke für deine Hilfe.

Gruß SimonErich
 

Neue Beiträge

Zurück