Ankündigung

Einklappen
Keine Ankündigung bisher.

Event ändern und dabei variablen übergeben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Event ändern und dabei variablen übergeben

    Hallo zusammen,

    einen Event-Handler ändern in JS ist generell nicht das problem, aber dabei Variablen zu übergeben anscheinend schon. Jetzt habe ich mir eine Lösung gebastelt, die aber leider nicht so ganz funktioniert:

    Code:
      if (navigator.appName.indexOf('Microsoft') > -1)
      {
        obje.setAttribute('onclick', function () { closeblock(obje); });
      }
      else
      {
        obje.addEventListener('click', function () { closeblock(obje); },false);
      }
    Hierbei habe ich das Problem, das die Funktion closeblock beim FF manchmal ohne onclick-Event ausgeführt wird und manchmal macht er auch genau das was er soll, nämlich nur den Event-Handler verändern und die Funktion nur ausführen wenn auch ein Klick passiert. Beim IE funktioniert es bestens...

    Hat jemand dafür ne Lösung? Bin für jede Hilfe dankbar.

    Gruß
    Cy


  • #2
    Ich würde dir ein bestehendes Framework empfehlen, weil es dort meistens optimal umgesetzt ist und auch definitiv in allen modernen Browsern funktioniert (deine Browser-Weiche ist nämlich ziemlich unsicher! Man sollte eine Browserweiche NIE über navigator machen sondern immer Weichen machen, die von vorhandenen bzw nicht vorhandenen Funktionen abhangen, in diesem Fall z.B.
    PHP-Code:
    if(!obje.addEventListener) { IE } else { Rest 
    oder sowas in der Art).
    Habe mich auch mal mit solchen Dingen rumgeschlagen, schlussendlich aber erkannt, dass man das Rad ja nicht immer neu erfinden muss.

    Z.B. mootools hat meines Wissens ziemlich gute Event-Funktionen. PrototypeJS und extJS haben auch Event-Funktionen, aber meines Wissens nicht so ausführlich.

    Kommentar


    • #3
      Hmm ja danke für den Tipp. Da werd ich mich wohl mal mit beschäftigen müssen. Ich hab jetzt erstmal da onclick-event durch nen einfachen Link ersetzt, das reicht erstmal. Aber ist auch mal ne Erfahrung das der IE tut was er soll und der FF nicht, sonst ist es immer umgekehrt xD

      Kommentar


      • #4
        Hallo cycap,

        Montellese hat schon recht. Von der Verwendung eines Frameworks rate ich dir aber ab, wenn du es nicht wirklich brauchst. Nur für diese Funktion eine Framework zu benutzen ist nun wirklich mit Kanonen auf Spatzen schießen.
        Die einfachste Möglichkeit, einen Event-Handler zu verändern ist die:
        Code:
        obj.onclick = function() {
            alert('click!');
        }
        Das ganze ist zwar nicht unbedingt die feine englische Art über DOM-Funktionen, funktioniert aber in jedem gängigen Browser.
        Aber Achtung: diese Variante funktioniert zwar in jedem Browser, aber natürlich nur bei Objekten, die auch wirklich dieses Attribut besitzen.
        Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

        Kommentar


        • #5
          Hi Manko, auf die Art kann ich der neuen Funktion aber kein Objekt übergeben. Das war der Grund für den umständlichen Code da oben...

          Kommentar


          • #6
            Code:
            window.onload = function() {
                var obj = document.getElementById('xyz');
                obj.onclick = function() {
                    objGreen(this);
                }
            }
            
            function objGreen(obj) {
                obj.style.color = '#0f0';
            }
            funktioniert doch wunderbar...
            Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

            Kommentar


            • #7
              verdammt du hast recht, komisch, ich könnte schwören bei mir hat das gestern nicht funktioniert, sonst hätt ich ja nicht dieses blöde ding da oben zurecht gemurkst aaargh, aber danke

              Kommentar


              • #8
                @Manko10: Ja grundsätzlich ist das mit Kanonen auf Spatzen schiessen, aber gerade das Download-Tool von mootools finde ich für solche Zwecke genial, da man genau angeben kann, welche Teile des Frameworks man braucht. Wenn man also nur die Event-Handler-Funktionen braucht, kann man das so auswählen und man hat halt dann noch die Core-Funktionen dabei (die immer dazu gehören). Damit relativiert sich das mit der Kanone ein bisschen

                Kommentar


                • #9
                  Die Datei liegt dann eh im Cache, der Code ist lesbar und dokumentiert fuer zukuenftige Editoren. Ich find JS-Frameworks fantastisch. Ich benutz prototype aktuell nur fuer $().toggle()
                  "Mein Name ist Lohse, ich kaufe hier ein."

                  Kommentar

                  Lädt...
                  X