Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

JS: 2 nahezu identische Funktionen, trotzdem andere Funktion

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
pee
PostRank 3
PostRank 3
Beiträge: 76
Registriert: 13.02.2009, 06:22

Beitrag von pee » 11.10.2009, 23:58

Hallo,

bei changed(); wird nach einer dynamischen XHTML-Änderung der Wert eines Tags in eine Variable geschrieben. Deren Wert wird nach 1500 Millisekunden mit dem aktuellen Wert im Quelltext des XHTML-Dokuments verglichen. Unterscheidet sich dieser, passiert nichts. Sind beide Werte gleich, wird eine Funktion ausgeführt. Die Werte sind Pixelangaben die zwischen 0 und 200 Pixel variieren.

Der zweite Teil von changed(); ist mit dem ersten nahezu identisch. Trotzdem wird expandOnly('daySlider'); ausgeführt, obwohl die beiden Werte nicht gleich sind.

Code: Alles auswählen

function changed(id) {
 
 
  if($('demo_min_thumb').style.left!='0px') {
 
    snap = $('demo_min_thumb').style.left;
    setTimeout("checkIfSliderStopped1()", 1500);
   
  }

  if($('slider-bg').title!='Slider') {
 
    snap2 = $('slider-bg').title;
    setTimeout("checkIfSliderStopped2()", 1500);
   
  }
 
}

function checkIfSliderStopped1() {
    if (snap ==  $('demo_min_thumb').style.left) {
      expandOnly('daySlider');
    }
}


function checkIfSliderStopped2() {
    if (snap2 == $('slider-bg').title) {
      expandOnly('options');
    }
}

Ist jemand so nett und spendet mir Rat?

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Lord Lommel
PostRank 10
PostRank 10
Beiträge: 3227
Registriert: 18.02.2008, 02:43
Wohnort: Halle / Saale

Beitrag von Lord Lommel » 12.10.2009, 08:55

Ich gebe dir den Rat, daß Prototype bei größeren Konstrukten enorm langsam wird. Ansonsten weiß ich nicht wirklich, was du willst.

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 12.10.2009, 12:08

pee hat geschrieben:

Code: Alles auswählen

function checkIfSliderStopped1() {
    if (snap ==  $('demo_min_thumb').style.left) {
      expandOnly('daySlider');
    }
}
Der zweite Teil von changed(); ist mit dem ersten nahezu identisch. Trotzdem wird expandOnly('daySlider'); ausgeführt,
Warum du die Ursache für den Fehler darin siehst, dass der erste und zweite Teil von changed() nahezu identisch sind, habe ich nicht verstanden.
obwohl die beiden Werte nicht gleich sind.
Wenn sie nicht gleich wären, würde die Funktion nicht ausgeführt werden, auf die korrekte Funktion von == ist durchaus Verlass. Dein Problem ist vermutlich, dass sie unerwarteterweise gleich sind (oder du noch irgendwo anders ein expandOnly('daySlider') stehen hast). Dem gilt es auf den Grund zu gehen, d.h. wann und wo wird snap gesetzt. Wird changed() möglicherweise öfter aufgerufen als du glaubst?

Besorge dir Firefox und dazu die Erweiterung Firebug, in letzterem ist auch ein guter Javascript-Debugger enthalten, mit dessen Hilfe du Schritt für Schritt den Ablauf und den Inhalt von snap verfolgen kannst.
Alternativ kannst du natürlich auch den Code mit alert()-Aufrufen zupflastern, die dir vor und nach jeder relevanten Zeile den Inhalt von snap & Co. ausgeben.
setTimeout("checkIfSliderStopped1()", 1500);
Den auszuführenden Code als Text zu übergeben kann man zwar machen, ist aber schlechter Stil, in erster Linie, weil der Code dann erst bei Ausführung geprüft wird und nicht bereits beim Laden des Skriptes.

setTimeout() akzeptiert auch eine Funktion als Argument, setTimeout(checkIfSliderStopped1, 1500); funktioniert daher genauso gut. Soll mehr Code eingebunden werden, lässt sich auch eine anonyme Funktion nutzen, womit du dann auch deine Hilfsfunktionen einsparen könntest und den auszuführenden Code da hast, wo er auch benötigt wird:

Code: Alles auswählen

setTimeout(function() {
        if (snap ==  $('demo_min_thumb').style.left) {
            expandOnly('daySlider'); 
        }
    }, 1500);

pee
PostRank 3
PostRank 3
Beiträge: 76
Registriert: 13.02.2009, 06:22

Beitrag von pee » 12.10.2009, 13:37

Es lag wohl daran, dass die Werte tatsächlich gleich waren. Nachdem ich die Vergleichsdauer auf 500 Millisekunden reduziert habe, wird die Funktion wie gewünscht ausgeführt.

Vielen Dank an euch Experten für die hervorragenden Antworten und den angenehmen Wortlaut.

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag