tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
567
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    SimonErich SimonErich ist offline Mitglied Brokat
    Registriert seit
    Jun 2005
    Beiträge
    303
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
     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 :
    1
    
    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 :
    1
    2
    3
    4
    5
    6
    
     
    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
     

  2. #2
    Quaese Quaese ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Feb 2004
    Beiträge
    3.451
    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 :
    1
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    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
     
    Vielleicht muss man manchmal vom Weg abkommen, um nicht auf der Strecke zu bleiben!
    ----
    Der "Fortsetzungsroman" auf www.leuteforum.de

    New kind to realize large scalable projects with jQuery: jQuery SDK

  3. #3
    SimonErich SimonErich ist offline Mitglied Brokat
    Registriert seit
    Jun 2005
    Beiträge
    303
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
     
    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
     

  4. #4
    Quaese Quaese ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Feb 2004
    Beiträge
    3.451
    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
     
    Vielleicht muss man manchmal vom Weg abkommen, um nicht auf der Strecke zu bleiben!
    ----
    Der "Fortsetzungsroman" auf www.leuteforum.de

    New kind to realize large scalable projects with jQuery: jQuery SDK

  5. #5
    SimonErich SimonErich ist offline Mitglied Brokat
    Registriert seit
    Jun 2005
    Beiträge
    303
    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 :
    1
    2
    3
    4
    5
    
             // 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
     

Ähnliche Themen

  1. jQuery - mehrere Events wahlweise um Funktion auszulösen?
    Von shredder01 im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 09.09.10, 18:49
  2. Zwei Events verknüpfen
    Von Tonelli im Forum VisualStudio & MFC
    Antworten: 3
    Letzter Beitrag: 30.11.07, 22:00
  3. Select Menu + zwei Events
    Von tanja im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 04.06.05, 17:13
  4. JComboBox: nach removeAllItems und addItem werden zwei Events abgefeuert
    Von Billie im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 08.05.05, 22:00
  5. Antworten: 3
    Letzter Beitrag: 28.03.05, 15:10