• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Funktionen, Schleifen, und und und verbinden ... Problem!?

Heinz91

New member
Hallo zusammen,

wieder einmal ein Problem *grummel*

In PHP bin ich es gewohnt, Funktionen problemlos miteinander verbinden zu können. Funzt in JavaScript jedoch nicht so, wie ich es mir vorstelle.
Ich habe 2 Teile, die für sich alleine wunderbar funktionieren. Will ich diese verbinden, geht es nicht.

Hier mal der Code:

Teil 1 - Funktionsbeschreibung:
Die DIV "box2" befindet sich irgendwo im Code. Es werden sämtliche Parameter ausgerechnet, ab wann diese "box2" in den sichtbaren Bereich kommt. Sobald diese DIV im sichtbaren Bereich ist, soll eine Funktion ausgeführt werden. Das funktioniert wunderbar.
Code:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Punkte einblenden erst ab sichtbarem Bereich</title>
<link rel="stylesheet" href="dots.css">
<style type="text/css">
body {font-size: 16pt; font-weight: bold; text-align: center;}
#box1 {height: 800px; border: 1px dotted #000000;}
#box2 {height: 400px; background-color: #ff0000;}
#box3 {height: 400px; background-color: #cccccc;}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
      // Browser-Fenster Höhe ermitteln
      var FENSTERHOEHE = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
</script>

</head>
<body>
<div id="box1">1. Box
</div>

<div id="box2">Das ist die 2. Box!</div>

<div id="box3">3. Box<br><br>
  <script>
    //Sichtbare Bildschirmhöhe ermitteln:
    document.write("Fensterhöhe: ");
    document.write(FENSTERHOEHE);
    document.write("<br>");

    //Position von box2 ermitteln:
    var BOXTOP = document.getElementById('box2').offsetTop;
    document.write("Position von box2: ");
    document.write(BOXTOP);
    document.write("<br>");

    //Differenz berechnen:
    var DIFFERENZ = BOXTOP - FENSTERHOEHE;
    document.write("Differenz: ");
    document.write(DIFFERENZ);
    document.write(" Pixel<br>");


    // 10px über der Differenz errechnen (also 496):
    var DIFFERENZ2 = DIFFERENZ + 10;
    document.write("Differenz + 10: ");
    document.write(DIFFERENZ2);
    document.write(" Pixel<br>");
    document.write("<br>Die Funktion soll demnach ab einem Scrollpunkt von 111 Pixeln ausgeführt werden");
  </script>
</div>

<script>

$(document).ready(function() {
    var boxPosY;
    $(window).bind( 'scroll', function() {
        boxPosY = $(window).scrollTop();
        if ( boxPosY >= DIFFERENZ2 ) {
            [B][COLOR="#FF0000"]// Hier soll die Schleife (bzw. der 2. Teil) rein !!![/COLOR][/B]
        }
        else if ( boxPosY < DIFFERENZ2 ) {
            // irgendwas
        }
    });
});

</script>
</body></html>

Teil 2: Dann habe ich die Funktion "Schleife" ;-) , wo mir an anderer Stelle ja sehr weitergeholfen wurde in diesem Forum - nochmals besten Dank an "kkapsner" ! Dieses Skript funktioniert für sich alleine stehend ebenso wunderbar.
Code:
for (var i = 1; i <= 30; i += 1){
        (function(i){
                     $(document).ready(function(){
                             var adot = $("#adot" + i);
                             adot.css("display","none");
                        window.setTimeout(
                                function(){
                                        adot.fadeIn(1000);
                                },
                                i * 50
                        );
                });
        }(i));

      Ausgabe = '<div id="adot' + i + '"><img src="adot01.jpg"><\/div>';
      document.write(Ausgabe);

Will ich diese beiden (wie in PHP gewohnt) zusammenfügen, geht gar nichts mehr.

Ich hab schon elendslange gegoogelt und rumprobiert. Ich schaffe es einfach nicht.
Vielleicht gibt es spezielle Syntaxe, die ich beachten müsste ... ich weiß es nicht.

Würde mich feuen, zumindest einen Tipp zu bekommen, wo ich nachschauen könnte.
Besten Dank im Voraus.
Grüße,
Heinz
 
Zeig doch mal deinen Zusammenwurf und schau mal in die Browserkonsole, welche Meldungen dort auftauchen.
 
Zeig doch mal deinen Zusammenwurf ...
Hier mein Zusammenwurf:
Code:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Punkte einblenden erst ab sichtbarem Bereich</title>
<link rel="stylesheet" href="dots.css">
<style type="text/css">
body {font-size: 16pt; font-weight: bold; text-align: center;}
#box1 {height: 800px; border: 1px dotted #000000;}
#box2 {height: 400px; background-color: #ff0000;}
#box3 {height: 400px; background-color: #cccccc;}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
      // Browser-Fenster Höhe ermitteln
      var FENSTERHOEHE = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
</script>

</head>
<body>
<div id="box1">1. Box
</div>

<div id="box2">Das ist die 2. Box!</div>

<div id="box3">3. Box<br><br>
  <script>
    //Sichtbare Bildschirmhöhe ermitteln:
    document.write("Fensterhöhe: ");
    document.write(FENSTERHOEHE);
    document.write("<br>");

    //Position von box2 ermitteln:
    var BOXTOP = document.getElementById('box2').offsetTop;
    document.write("Position von box2: ");
    document.write(BOXTOP);
    document.write("<br>");

    //Differenz berechnen:
    var DIFFERENZ = BOXTOP - FENSTERHOEHE;
    document.write("Differenz: ");
    document.write(DIFFERENZ);
    document.write(" Pixel<br>");


    // 10px über der Differenz errechnen (also 496):
    var DIFFERENZ2 = DIFFERENZ + 10;
    document.write("Differenz + 10: ");
    document.write(DIFFERENZ2);
    document.write(" Pixel<br>");
    document.write("<br>Die Funktion soll demnach ab einem Scrollpunkt von " + DIFFERENZ + " Pixeln ausgeführt werden");
  </script>
</div>

<script>

$(document).ready(function() {
    var boxPosY;
    $(window).bind( 'scroll', function() {
        boxPosY = $(window).scrollTop();
        if ( boxPosY >= DIFFERENZ2 ) {
            [B][COLOR="#FF0000"]// HIER IST DER 2. TEIL .........................ANFANG[/COLOR][/B]
            for (var i = 1; i <= 30; i += 1){
        (function(i){
                     $(document).ready(function(){
                             var adot = $("#adot" + i);
                             adot.css("display","none");
                        window.setTimeout(
                                function(){
                                        adot.fadeIn(1000);
                                },
                                i * 50
                        );
                });
        }(i));

      Ausgabe = '<div id="adot' + i + '"><img src="adot01.jpg"><\/div>';
      document.write(Ausgabe);
}
            [B][COLOR="#FF0000"]// HIER IST DER 2. TEIL .........................ENDE[/COLOR][/B]
        }
        else if ( boxPosY < DIFFERENZ2 ) {
            // irgendwas
        }
    });
});

</script>
</body></html>
Zwischen den roten Kommentaren ist das eigentlich funktionierende Skript.
Da wäre meine Frage, ob es in JavaScript bestimmte Regeln gibt, Skripte miteinander zu verknüpfen?

- - - Aktualisiert - - -

... schau mal in die Browserkonsole, welche Meldungen dort auftauchen.

Mit der Browserkonsole kann ich nicht wirklich etwas anfangen.
Habe zwar auch schon euren Thread Arbeiten mit der Konsole gelesen und ausprobiert ... aber in diesem Fall bringt er keine Fehlermeldung.

Oder verwende ich die Konsole falsch?
 
kurz vor ende 2.teil steht ein document.write im domreadyhandler
Die Klärung scheint etwas näher gekommen zu sein ;-)
Als Anfänger fehlen mir aber noch ein wenig die Zusammenhänge ... könntest du mich bitte aufklären?
Warum darf das da nicht stehen?
Bzw. welche Alternativen gibt es, um eine DIV bzw. ein Bild auszugeben?

Gruß,
Heinz
 
Nimm lieber innerHTML. Aber hatten wir das in einem anderen Thread nicht schonmal erwähnt, dass document.write() Nebenwirkungen hat?
 
Kaum halte ich mich mal mit meinem Hinweis, dass ich Anfängern von der Benutzung von document.write() abrate, zurück, passiert genau das, weswegen ich davon abrate...

@mikdoe: das war nicht im Thread von Heinz91.
 
@kkapsner
Sorry ... ein Anfänger muss zuerst mal auf die Schnauze fallen, bis er's glaubt ;-)

@mikdoe
Ja, teilweise ;-)
... da ist jedoch noch mehr, was nicht funktioniert.
Aber ich will erst mal selber ein wenig rumprobieren, und versuche den Bug selbst zu finden, um bei der Gelegenheit tiefer in JavaScript einzutauchen und zu lernen ;-)

Ich melde mich dann morgen, falls es nicht klappen sollte.
Danke für die Nachfrage.
Gruß,
Heinz
 
Ja ok. Und immer dran denken: Konsole einblenden und im Auge behalten!! Bei unklaren Meldungen einfach hier fragen. Man kann grundsätzlich (bis auf ganz wenige Ausnahmen) sagen, dass die Konsole leer bleiben sollte, wenn alles OK ist.
 
Es gibt noch genug andere Sachen, bei denen ein Anfänger auf die Schnauze fallen kann.
ja, und jedesmal wenn er auf die Schnauze fällt, lernt er etwas, im gegensatz zu demjenigen, der alles das nicht macht, wozu ihm andere raten, ohne überhaupt zu wissen warum.
erkläre es lieber anstelle davon abzuraten und gut is.
 
Dann kann ich ja ab jetzt jedesmal auf diesen Thread verlinken, wenn ich von document.write() abrate.
warum? du rätst auch an stellen von document.write() ab, wo es keine rolle spielt, ob document.write oder etwas anderes genutzt wird.
auf den thread kannst du verweisen, wenn jemand document.write nach abschluss des documents verwendet, aber da finde ich die doku besser
 
Oh Mann... lass' es doch einfach mal gut sein. Ich werde mit dir nicht nochmal darüber diskutieren - du kannst meine Argumente ja nachlesen (finde gerade den ausführlichen Thread nicht mehr). Wir kommen da auf keinen gemeinsamen Nenner.
Ich werde immer davon abraten, wenn es wo eingesetzt wird wo man es benutzen kann, aber meiner Meinung nicht soll, und du wirst sagen, dass du nicht dieser Meinung bist und findest, dass man es Anfängern möglichst schwer machen sollte. Schön für dich - ich hab' besseres zu tun, als mir dir die gleiche Sache zehn mal durchzukauen.

Ich werde mein automatisches Textersetzungsscript so umschreiben, dass es jetzt jedesmal das einfügt, wenn ich document.write() schreibe:
http://www.w3.org/html/wg/drafts/html/CR/webappapis.html#dynamic-markup-insertion schrieb:
This method has very idiosyncratic behavior. In some cases, this method can affect the state of the HTML parser while the parser is running, resulting in a DOM that does not correspond to the source of the document (e.g. if the string written is the string "<plaintext>" or "<!--"). In other cases, the call can clear the current page first, as if document.open() had been called. In yet more cases, the method is simply ignored, or throws an exception. To make matters worse, the exact behavior of this method can in some cases be dependent on network latency, which can lead to failures that are very hard to debug. For all these reasons, use of this method is strongly discouraged.
 
Oh Mann... lass' es doch einfach mal gut sein. Ich werde mit dir nicht nochmal darüber diskutieren - du kannst meine Argumente ja nachlesen (finde gerade den ausführlichen Thread nicht mehr). Wir kommen da auf keinen gemeinsamen Nenner.
ich will nicht unbedingt mit dir darüber diskutieren(aber wir können das gerne tun) und ich weiss, das wir da nie auf einen gemeinsamen nenner kommen, aber solange du ...

Ich werde immer davon abraten, wenn es wo eingesetzt wird wo man es benutzen kann, aber meiner Meinung nicht soll
werde ich

sagen, dass du nicht dieser Meinung bist und

und ich finde nicht

dass man es Anfängern möglichst schwer machen sollte.
weil das argument für den ar... ist, anfänger sind nicht blöd und werden verstehen, das document.write nach abschluss des documents ein implizites open macht

Ich werde mein automatisches Textersetzungsscript so umschreiben, dass es jetzt jedesmal das einfügt, wenn ich document.write() schreibe:
jetzt bin ich aber schwer beeindruckt
mal davon abgesehen, dass das, was da steht, logisch ist und kein grund davon abzuraten.
fälle in denen document write nicht ausgeführt wird oder zu exeptions führen sind mir nicht bekannt, zeige mir einen und wir können drüber diskutieren.
der rest gilt genausogut für innerhtml und ist sinn und zweck der funktion bzw. ist so per design, ein document.write zur laufzeit außerhalb des documents macht keinen sinn, wohin soll er denn bitte schreiben?
 
Zurück
Oben