Susanne: Koordinaten einer Grafik durch onclick

Hallo,

ich habe folgendes Problem:

Ich möchte aus einer Grafik (jpg) einen rechteckigen Bereich ausschneiden können. Dazu möchte ich zunächst den Eckpunkt oben links, anschließend unten rechts auswählen. Meine Idee ist es, dies über onclick zu realisieren.

<html><head><title>Test</title>
<script type="text/javascript">
function Coords1 () {
  if (window.event)
    alert("x1 = " + window.event.x + "/ y1 = " + window.event.y);
}
</script>
</head><body>
<div><p onclick="Coords1()"><img src="beispiel.JPG" ></p></div>
</body></html>

Mit dieser Variante bekomme ich allerdings nur einen Punkt ausgegeben. Die Funktion onclick kann ich leider nur einmal auf einer Seite auswählen.

Gibt es eine Möglichkeit, zwei Koordinaten zu ermitteln, evtl. auch ohne onclick, oder kann ich onclick zweimal ausführen?

Vielen Dank für eure Hilfe,
Susanne

  1. Hi Susanne!

    Gibt es eine Möglichkeit, zwei Koordinaten zu ermitteln, evtl. auch ohne onclick, oder kann ich onclick zweimal ausführen?

    Ich würde onmousedown und onmouseup empfehlen. Die beiden Eventhandler sind doch wie gemacht für dich. :-)

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. Hallo H☼psel,

      im Prinzip ist die Idee mit onmousedown und onmouseup super. Das Problem ist nur, dass ich nach dem onmousedown die Postion des Cursors nicht verändern kann, um am zweiten Punkt das onmouseup durchzuführen. Da erscheint dieser durchgestrichene Kreis. Würde ich die Punkte nacheinander anklicken, gehen die Variablen des Punktes vorher verloren (so gesehen das gleiche Problem, das ich mit onclick hatte). Gibt es einen Trick, wie ich die Sperre umgehen kann, so etwa wie beim Aufziehen eines Rechtecks in einem Grafikprogramm?

      Vielen Dank für deine Hilfe,
      Susanne

      1. Hi,

        Gibt es einen Trick, wie ich die Sperre umgehen kann,

        es gibt keine Sperre. Es gibt lediglich das Ereignis. Du wirst sicher zugeben, dass ein "zweiter" Klick ein eigenständiges Ereignis ist, nämlich schlicht und ergreifend ein Klick - ergo ist, wenn Du immer nur ein Ereignis betrachtest, der "zweite" Klick gleichzeitig der einzige Klick.

        Wenn es vorher ein anderes Ereignis gab, welches Dich später interessieren könnte, was musst Du also damit machen?

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi,

          Du wirst sicher zugeben, dass ein "zweiter" Klick ein eigenständiges Ereignis ist, nämlich schlicht und ergreifend ein Klick - ergo ist, wenn Du immer nur ein Ereignis betrachtest, der "zweite" Klick gleichzeitig der einzige Klick.

          Sicher gebe ich das zu. Das ist ja aber auch genau das Problem. Ich brauch 2 Koordinaten.

          Wenn es vorher ein anderes Ereignis gab, welches Dich später interessieren könnte, was musst Du also damit machen?

          Durch zweifaches Ausführen des Ereignisses Klick gehen mir allerdings die Werte des ersten Ereignisses Klick verloren. Auch wie ich die Daten zwischenspeichern kann ist mir unklar, da ich nach zweimaligen Ausführen eines Ereignisses das jeweils vorangehende überschreibe, oder sehe ich das falsch?

          Susanne

          1. Warum machst du es nicht ganz einfach und verwendest ein Array um deine Koordinaten zu sichern?

            var n = 1;
            var posX = new Array(), posY = new Array();

            function getKoordinaten(x, y) {

            posX[n] = x;
             posY[n] = y;

            n++

            }

            somit kannst du ganz einfach auch 100 mal auf ein Bild klicken und deine Koordinaten werden jedesmal in dem Array gesichert... um an die Koordinate bspw. des zweiten Klicks zu kommen machst du folgendes:

            alert("X: " + posX[2] + " - Y: " + posY[2]);

            Natürlich fehlt jetzt noch die Positionsabfrage, was du ja mit event machen kannst.. wobei window.event keine glückliche Lösung ist, da diese nur im IE funktioniert!

            Grüße

            1. Super ... vielen Dank! Es läuft :-)

              1. Kein Problem :-)

            2. var n = 1;

              Warum fängst du mit eins an?
              Arrays fangen in den meisten Programmiersprachen bei null an.

              Struppi.

              --
              Javascript ist toll (Perl auch!)
              1. Ich habe nur mit der 1 angefangen um den Sachverhalt besser zu verdeutlichen!

                [1] = 1. Klick
                [2] = 2. Klick

                usw..

                Grüße

                1. Ich habe nur mit der 1 angefangen um den Sachverhalt besser zu verdeutlichen!

                  [1] = 1. Klick
                  [2] = 2. Klick

                  usw..

                  klar, nur ist das aus Sicht der Programmierung unlogisch, da jetzt das erste Element leer ist.

                  Struppi.

                  --
                  Javascript ist toll (Perl auch!)
                  1. Unlogisch ist es nicht, weil NULL ist auch ein Wert ;-)

                    1. Unlogisch ist es nicht, weil NULL ist auch ein Wert ;-)

                      Schön wenn der erste wert null wäre, ist er aber nicht.

                      Struppi.

                      --
                      Javascript ist toll (Perl auch!)
                      1. JavaScript ist es egal, wenn ich z.B. mit meinArray = new Array() ein Array Element erzeuge, und per meinArray[5] = "test" einen Wert zuweise... dann sind alle zuvor nicht gesetzten Feldelemente 0, 1, 2, 3 und 4 als null bzw. undefined gesetzt!
                        Außerdem handelt es sich bei JS nicht um eine Programmier- sondern um eine Scriptsprache... bei Programmiersprachen ist sowas sicherlich nicht möglich, bei Scriptsprachen wie z.B. auch PHP schon...
                        Wäre ja extrem schlimm, wenn sowas in einer Scriptsprache nicht machbar wäre!

                        1. JavaScript ist es egal, wenn ich z.B. mit meinArray = new Array() ein Array Element erzeuge, und per meinArray[5] = "test" einen Wert zuweise... dann sind alle zuvor nicht gesetzten Feldelemente 0, 1, 2, 3 und 4 als null bzw. undefined gesetzt!

                          null bzw undefined ist falsch, sie sind immer undefiniert darauf wollte ich hinweisen. Wie auch immer es ist einfach nicht sinnvoll das erste Element eines Arrays auszulassen.

                          Außerdem handelt es sich bei JS nicht um eine Programmier- sondern um eine Scriptsprache...

                          Das ist Unsinn.

                          Programmiersprachen ist alles, womit du im Computer einen Ablauf von Aktionen steuern kannst, ob man dazu den Quelltext kompilieren muss oder nicht spielt absolut keine Rolle.

                          Struppi.

                          --
                          Javascript ist toll (Perl auch!)
                          1. null bzw undefined ist falsch, sie sind immer undefiniert darauf wollte ich hinweisen. Wie auch immer es ist einfach nicht sinnvoll das erste Element eines Arrays auszulassen.

                            Nein, bei Scriptsprachen fürs Web bspw. ist das absolut sinnvoll... weil warum sollte ich z.b. erst ein komplettes Array mit einem Wert vorbelegen, wenn ich bspw. nur den Raum von 50 bis 75 benötige?
                            Bei Scriptsprachen sollte man immer Ressourcensparend denken, da diese im Gegensatz zu Programmiersprachen erstellen Anwendungen, erst während der Laufzeit übersetzt werden!
                            Ich entwickle bspw. mit Hilfe von JS und PHP ein Browsergame, wobei ich eine Karte von 2000 x 2000 Felder besitze... brauche ich nur einen Teil dieser Karte, erzeuge ich mir ein Array und fülle bspw. nur den Bereich von [950] bis [1050] mit Werten! Unsinnig und nicht grad Ressourucen schonend wäre es nun jedesmal vorher eine komplette Schleife durchlaufen zulassen, die erst das Array von der Stelle 0 bis 2000 füllen würde, oder ich jedesmal Position - 950 rechnen müsste, damit ich ja bei der Stelle 0 anfange... für solche Sachen gibt es bspw. in PHP die Funktion isset() oder in JavaScript kann man das ganz einfach mit if (!var) prüfen ob ein Element existiert!

                            Das ist Unsinn.

                            Programmiersprachen ist alles, womit du im Computer einen Ablauf von Aktionen steuern kannst, ob man dazu den Quelltext kompilieren muss oder nicht spielt absolut keine Rolle.

                            Ja, im Prinzip hast du schon recht... aber ob man nun den Quellcode vorher compiliert oder erst zur Laufzeit spielt eine entscheidende Rolle und das macht den größten Unterschied zwischen Script- und Programmiersprachen aus!

                            1. null bzw undefined ist falsch, sie sind immer undefiniert darauf wollte ich hinweisen. Wie auch immer es ist einfach nicht sinnvoll das erste Element eines Arrays auszulassen.

                              Nein, bei Scriptsprachen fürs Web bspw. ist das absolut sinnvoll... weil warum sollte ich z.b. erst ein komplettes Array mit einem Wert vorbelegen, wenn ich bspw. nur den Raum von 50 bis 75 benötige?

                              Warum benötigst du nur den Raum 50 bis 75?

                              Bei Scriptsprachen sollte man immer Ressourcensparend denken, da diese im Gegensatz zu Programmiersprachen erstellen Anwendungen, erst während der Laufzeit übersetzt werden!

                              Gut, und warum tust du es nicht?
                              Bei deinem Ansatz musst du wenn du ale Elemente durchlaufen willst immer die Obergrenze und Untergrenze angeben, ansattt mit den "handelsüblichen" boundaries zu arbeiten.

                              .... JavaScript kann man das ganz einfach mit if (!var) prüfen ob ein Element existiert!

                              Alles schön und gut, nur erklärt mir das zumindest nicht, warum du nicht den ersten Wert dem ersten Arrayeintrag zuweist? stattdessen einen auslassen willst um dann später erst überprüfen zu müssen welche Arrayeinträge gefüllt sind und welche nicht. Das ist für mich das gegenteil von resourcenfreundlich.

                              Ja, im Prinzip hast du schon recht... aber ob man nun den Quellcode vorher compiliert oder erst zur Laufzeit spielt eine entscheidende Rolle und das macht den größten Unterschied zwischen Script- und Programmiersprachen aus!

                              Nein du hast es nicht verstanden, es gibt keinen Unterschied zwischen einer Programmiersprache und einer Skriptsprache. Alle Skriptsprachen sind Programmiersprachen.

                              Struppi.

                              --
                              Javascript ist toll (Perl auch!)
                              1. Warum benötigst du nur den Raum 50 bis 75?

                                Halt wie ich das bei dem Beispiel mit der Karte beschrieben habe!

                                Gut, und warum tust du es nicht?
                                Bei deinem Ansatz musst du wenn du ale Elemente durchlaufen willst immer die Obergrenze und Untergrenze angeben, ansattt mit den "handelsüblichen" boundaries zu arbeiten.

                                Nein muss man nicht. wenn ich nur einen Bereich zwischen 50 und 75 benötige und bspw. mit einer Schleife nur den Bereich von 50 bis 75 durchlaufe (for x = 50; x <= 75; x++)... warum sollte ich dann die Werte von 0 bis 49 vorbelegen.. wenn diese sowieso schon standardmäßig mit undefined vorbelegt sind!?

                                Nach deinem Prinzip müsste ich das so machen:

                                for (x = 0; x <= 100; x++) {

                                if (x >= 50 && x <= 75) meinArray[x] = "test";
                                 else meinArray[x] = null;

                                }

                                oder auch, wobei ich bei jedem Schleifendurchlauf x -50 rechne, was auch nicht grad so toll ist:

                                for (x = 50; x <= 75; x++) meinArray[x - 50] = "test";

                                Sag mir nicht, dass das ressourcensparend ist ;-)

                                Grüße

                                1. Gut, und warum tust du es nicht?
                                  Bei deinem Ansatz musst du wenn du ale Elemente durchlaufen willst immer die Obergrenze und Untergrenze angeben, ansattt mit den "handelsüblichen" boundaries zu arbeiten.

                                  Nein muss man nicht. wenn ich nur einen Bereich zwischen 50 und 75 benötige und bspw. mit einer Schleife nur den Bereich von 50 bis 75 durchlaufe (for x = 50; x <= 75; x++)... warum sollte ich dann die Werte von 0 bis 49 vorbelegen.. wenn diese sowieso schon standardmäßig mit undefined vorbelegt sind!?

                                  Und woher bekommst du 50 und 75?
                                  Wenn du mir jetzt sagst die stehen als fester Wert in deinem Programm, dann hast du recht, nur ist das Programm dann nicht mehr sonderlich flexibel.

                                  Nach deinem Prinzip müsste ich das so machen:

                                  for (x = 0; x <= 100; x++) {

                                  if (x >= 50 && x <= 75) meinArray[x] = "test";
                                  else meinArray[x] = null;

                                  Quatsch, woraus liest du das ich irgendwelche Werte mit null vorbelegen will?
                                  Du scheinst nicht zu verstehen, worauf ich hinaus will, lassen wir's einfach.

                                  Struppi.

                                  --
                                  Javascript ist toll (Perl auch!)
                                  1. Und woher bekommst du 50 und 75?
                                    Wenn du mir jetzt sagst die stehen als fester Wert in deinem Programm, dann hast du recht, nur ist das Programm dann nicht mehr sonderlich flexibel.

                                    Doch das ist noch flexibel... aber es gibt Fälle in denen man festgesetzte Wertebereiche hat, bei denen es unsinnig wäre wirklich bei 0 anzufangen... Denn warum sollte ich zum schreiben des Arrays erst Minus rechnen damit ich auf 0 komme und dann beim Lesen wieder Plus, damit ich wieder auf die richtigen Werte gelange.

                                    »»Quatsch, woraus liest du das ich irgendwelche Werte mit null vorbelegen will?
                                    »»Du scheinst nicht zu verstehen, worauf ich hinaus will, lassen wir's einfach.

                                    Weil du unbedingt mit 0 anfangen möchtest, das Array zu belegen!!
                                    Doch ich versteh schon worauf du hinaus willst, leider anscheinend du aber nicht, worauf ich hinaus möchte! Anscheinend sind wir da wirklich geteilter Meinung.

                                    Grüße

                                    1. Doch das ist noch flexibel... aber es gibt Fälle in denen man festgesetzte Wertebereiche hat, bei denen es unsinnig wäre wirklich bei 0 anzufangen...

                                      Felxibel und festgesetzt widerspricht sich.

                                      Denn warum sollte ich zum schreiben des Arrays erst Minus rechnen damit ich auf 0 komme und dann beim Lesen wieder Plus, damit ich wieder auf die richtigen Werte gelange.

                                      Kein Mensch macht sowas.

                                      »»Quatsch, woraus liest du das ich irgendwelche Werte mit null vorbelegen will?
                                      »»Du scheinst nicht zu verstehen, worauf ich hinaus will, lassen wir's einfach.

                                      Weil du unbedingt mit 0 anfangen möchtest, das Array zu belegen!!
                                      Doch ich versteh schon worauf du hinaus willst, leider anscheinend du aber nicht, worauf ich hinaus möchte! Anscheinend sind wir da wirklich geteilter Meinung.

                                      Ich möchte nicht bei null Anfangen, sondern der Index eines Array in JS fängt bei null und irgendwie scheinst du das nicht verstehen zu wollen.

                                      Du kannst es gerne ausprobieren:

                                      var arr = new Array();  
                                      alert(arr.length);  
                                      
                                      

                                      Struppi.

                                      --
                                      Javascript ist toll (Perl auch!)
                                      1. var arr = new Array();

                                        arr[5] = "test";

                                        alert(arr.length); // ergibt 6

                                        Weil JavaScript so clever ist und die Elemente zuvor mit dem Autowert undefined füllt!

                                        for (x = 0; x < arr.length; x++) alert(arr[x]); // bringt bei den Elementen 0 - 4 undefined und bei der 5 "test" !!

                                        Kein Fehler nix ;-)

                                        Les dir mal: http://www.evocomp.de/beispiele/javascript/array.html durch !!

                                        Besonders die Stelle:

                                        Über die Array-Eigenschaft length läßt sich die Anzahl der Elemente ermitteln, die im entsprechenden Array Platz finden. Wird lesend auf einen nicht existierenden Index zugegriffen, so liefert JavaScript „undefined”. Beim Schreibenden Zugriff auf einen nicht existierenden Index wird das Array bis zu diesem Index mit leeren Speicherplätzen gefüllt und der entsprechende Wert an der gewünschten Stelle angehängt.

                                        1. Hallo,

                                          var arr = new Array();
                                          arr[5] = "test";
                                          alert(arr.length); // ergibt 6

                                          Weil JavaScript so clever ist und die Elemente zuvor mit dem Autowert undefined füllt!

                                          Ja, genau das versucht Struppi dir die ganze Zeit klarzumachen - und dass es höchst ineffizient ist, das implizite Erzeugen von -zig Elementen zu provozieren, nur weil der Programmierer zu faul ist, einen konstanten (oder meinetwegen auch variablen) Offset beim Indizieren hinzuschreiben.

                                          So long,
                                           Martin

                                          --
                                          Moskito, ergo summ.
                                          1. Nein ist es ganz und gar nicht! Und das Beispiel für was ich z.B sowas benutze, habe ich vorhin schon genannt... das hat nichts mit Faulheit des Programmierers oder Sonstigem zu tun, es ist einfach von der Geschwindigkeit des Scriptes effizienter!

                                            Wenn ich z.B. direkt Positionen vorgegeben habe, wie bspw. auf einer Karte und dann einfach sage, setze Position X: 50 und Position Y: 65 auf wahr! Warum sollte ich denn dann über umständliche Wege und am Ende zig Hilfsvariablen die Werte sichern und wieder auslesen... wenn ich direkt sagen kann posX[x] = true; posY[y] = true;

                                          2. Oder noch einfacher erklärt:

                                            Ich habe eine Karte, Matrix oder nennt es wie ihr wollt! Die Breite und Höhe können variabel sein, stehen aber in gewisser Weise immer fest.

                                            0 1 2 3 4 5 6 7 8 9 ...
                                                -------------------
                                            0 | 0 0 0 0 0 0 0 0 0 0
                                            1 | 0 0 0 0 0 0 0 0 0 0
                                            2 | 0 0 0 0 0 0 0 0 0 0
                                            3 | 0 0 0 0 0 0 0 0 0 0
                                            4 | 0 0 0 0 0 0 0 0 0 0
                                            5 | 0 0 0 0 0 0 0 0 0 0
                                            6 | 0 0 0 0 0 0 0 0 0 0
                                            7 | 0 0 0 0 0 0 0 0 0 0
                                            8 | 0 0 0 0 0 0 0 0 0 0
                                            9 | 0 0 0 0 0 0 0 0 0 0
                                            ...

                                            So, ich erzeuge mir ein Array 2 dimensionales Array:

                                            matrix = new Array(10);
                                            for (x = 0; x < 10; x++) matrix[x] = new Array(10);

                                            Dann setze ich bspw. die Position 5;5 auf wahr: matrix[5][5] = true;

                                            Und nun kann ich ganz einfach abfragen, ob die Position 1;1 gesetzt ist: if(matrix[1][1])... dies würde mir undefined bringen, weil das Element nocht nicht gesetzt wurde!

                                            Warum sollte man das so machen?:

                                            matrix = new Array(10);
                                            for (x = 0; x < 10; x++) {
                                             matrix[x] = new Array(10);
                                             for (y = 0; y < 10; y++) matrix[x][y] = false;
                                            }

                                            Das wären 100 Schleifendurchläufe, die man auf einfache Art und Weise umgehen kann..

                                            Warum mitgebrachte Funktionalität von JavaScript nicht nutzen?

                                            Grüße

                                            1. 0 1 2 3 4 5 6 7 8 9 ...
                                                  -------------------
                                              0 | 0 0 0 0 0 0 0 0 0 0
                                              1 | 0 0 0 0 0 0 0 0 0 0
                                              2 | 0 0 0 0 0 0 0 0 0 0
                                              3 | 0 0 0 0 0 0 0 0 0 0
                                              4 | 0 0 0 0 0 0 0 0 0 0
                                              5 | 0 0 0 0 0 0 0 0 0 0
                                              6 | 0 0 0 0 0 0 0 0 0 0
                                              7 | 0 0 0 0 0 0 0 0 0 0
                                              8 | 0 0 0 0 0 0 0 0 0 0
                                              9 | 0 0 0 0 0 0 0 0 0 0
                                              ...

                                              Super, das ist genau das was ich die ganze Zeit meine.
                                              Die linke obere Ecke heißt bei dir [0][0] das ist das was ich die ganze Zeit dir versuche zu erklären
                                              Aber warum benutzt du dann in einem Beispiel dass du einer Anfängerin zeigst als linke Ecke die eins? Hat das einen Grund ausser dem von mir genannten?

                                              Struppi.

                                              --
                                              Javascript ist toll (Perl auch!)
                                              1. Aber warum benutzt du dann in einem Beispiel dass du einer Anfängerin zeigst als linke Ecke die eins?

                                                Ja damit hast du deine Frage schon selbst beantwortet.. wenn du meinen ersten Post liest, dann wirst du sehen das ich geschrieben habe mit [1] kannst du den ersten klick auslesen! mit der [2] den zweiten... wäre doch etwas umständlich gewesen noch zu erklären, dass sie immer -1 rechnen müsste. okay?
                                                Außerdem ist das JavaScript völlig egal, ob man da mit 0 oder 1 anfängt... fängt man mit der 1 an, wie ich das schon 100 mal gesagt hab, wird die 0 auch gesetzt, in dem Falle mit dem Wert undefined... weil einen 0ten Klick gibt es nicht!!

                                                Außerdem habe ich die ganze Zeit nicht gesagt, dass ein Array nicht bei 0 anfängt... ich meine ja nur die ganze Zeit, dass man wenn man nur bestimmte Elemente eines Arrays benötigt die anderen ungenutzten ja nicht selbst setzen muss, da das JavaScript von alleine macht!

                                                Grüße

                                                1. Aber warum benutzt du dann in einem Beispiel dass du einer Anfängerin zeigst als linke Ecke die eins?

                                                  Ja damit hast du deine Frage schon selbst beantwortet.. wenn du meinen ersten Post liest, dann wirst du sehen das ich geschrieben habe mit [1] kannst du den ersten klick auslesen! mit der [2] den zweiten... wäre doch etwas umständlich gewesen noch zu erklären, dass sie immer -1 rechnen müsste. okay?

                                                  Oh Mann, jetzt sind wir wieder genau am Anfang.

                                                  Nein ich habe meine Frage nicht selbst beantwortet, bei mir ist die erste Zahl 0, für JS ist die erste Zahl 0, nur für dich ist die erste Zahl 1. Und wieso muss sie immer -1 rechnen? Im gegenteil in deinem Fall muss sie mit +1 rechnen, da sie ja nicht bei 0 anfangen kann.

                                                  Üblicherwiese (wie du es eben ja auch in deinem Beispiel gezeigt hast) füllt du ein Array nacheinander.

                                                  my arr = [];  
                                                  while( !stop)  
                                                  {  
                                                  arr.push( wert );  
                                                  if( ende() stop = true;  
                                                  }  
                                                    
                                                  for(var i = 0; i < arr.length;i++)  
                                                  {  
                                                  Ausgabe  
                                                  }  
                                                  
                                                  

                                                  So weißt du wieviele Einträge in dem Array sind (.length) und kannst bei null anfangen. so wie es üblich ist.

                                                  ...weil einen 0ten Klick gibt es nicht!!

                                                  0 ist der erste Eintrag. Ich sagte ja bereits, es geht dir nur um eine sprachliche Umsetzung.

                                                  Außerdem habe ich die ganze Zeit nicht gesagt, dass ein Array nicht bei 0 anfängt... ich meine ja nur die ganze Zeit, dass man wenn man nur bestimmte Elemente eines Arrays benötigt die anderen ungenutzten ja nicht selbst setzen muss, da das JavaScript von alleine macht!

                                                  Ich weiß nicht warum du mir das hundertmal sagst, das bestreite ich nicht. Ich frag mich nur warum du (in manchen Fällen nicht in manchen schon) für den ersten Eintrag partout nicht das erste Element eines Arrays benutzen willst.

                                                  Struppi.

                                                  --
                                                  Javascript ist toll (Perl auch!)
                                                  1. Klar kann man das erste Element eines Arrays benutzen, das bestreite ich doch auch gar nicht... aber es war doch einfach nur zur Verdeutlichung, dass ich mit dem ersten angefangen habe!

                                                    Aber dennoch geht es doch um die Grundaussage, dass wenn man ein Array füllt und bspw. mit der 1 anfängt, JavaScript intern das Element 0 automatisch mit undefined setzt.

                                                    Und es gibt tatsächlich Sachen in denen man soetwas benötigt... gerade wie mit der von mir beschriebenen Karte. In kleinen Projekten kann man natürlich mit 0 anfangen und dann hin und her rechnen...

                                                    1. Klar kann man das erste Element eines Arrays benutzen, das bestreite ich doch auch gar nicht... aber es war doch einfach nur zur Verdeutlichung, dass ich mit dem ersten angefangen habe!

                                                      NEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEIIIIIIIIIIIIIIIIIIIIN!
                                                      du hast mit dem zweiten angefangen!!!!!!
                                                      Das erste Element ist array[0]

                                                      Aber dennoch geht es doch um die Grundaussage, dass wenn man ein Array füllt und bspw. mit der 1 anfängt, JavaScript intern das Element 0 automatisch mit undefined setzt.

                                                      Diese Grundaussage hab ich nirgendwo - ich wiederhole NIRGENDWO - bestritten. Ich verstehe auch nicht, wie du darauf kommst, dass das ein Grundaussage wäre. Mir ging es um was völlig anderes.

                                                      Und es gibt tatsächlich Sachen in denen man soetwas benötigt... gerade wie mit der von mir beschriebenen Karte. In kleinen Projekten kann man natürlich mit 0 anfangen und dann hin und her rechnen...

                                                      Gerade in der von dir beschriebenen Karte ist die linke obere Ecke 0,0
                                                      Dort rechnest du also immer hin und her?

                                                      Und warum sollte man hin und her rechnen, du willst doch hin und her Rechnen weil du nicht mit dem ersten Element anfängst sondern mit dem zweiten.

                                                      Also nochmal ganz langsam:
                                                      Das erste Element eines Arrays - sofern der offset nicht anders eingestellt ist - ist das Element, das den Index mit dem Wert Null hat. Das Letzte das mit dem Index .length - 1. Dadurch ist es möglich ein Array vom anfang bis zum ende zu durchlaufen ohne das man irgendwelche Werte als Anfangszähler oder als Endwert einsetzen muss, man kann mit 0 und length arbeiten.

                                                      Das ist besonders wichtig in solchen Fällen, in denen man eine Reihe von werten hat, wie es vermutlich in dem ursprünglichen Posting der Fall ist. Deshalb kritisierte ich, dass du als Startwert die eins genommen hast, was du vermutlich getan hast, um einen sprachlichen Bezug zu der Aussage: "das ist der erste Wert" herzustellen. Das sei dir ungenommen, ist aber aus programmiertechnischen Sicht ungünstig, da dort das erste Element wie oben beschrieben Null ist, also sollte man, wenn es keine wirklich trifftigen Gründe dagegen gibt, für das erste Element immer Null als Index verwenden. Da du bisher keinen trifftigen Gründen genannt hast und deine Beispiele auch alle die Null als erstes Element eines arrays verwenden, können wir die aussage so stehen lassen, dass es besser wäre dein Beispiel bei null zu beginnen. Nicht weil es in diesem Beispiel irgendwas an Effizienz o.ä. bringt, sondern einfach damit einem Neuling nicht schon von Anfang an ein falsches Verständnis für Arrays gezeigt wird.

                                                      Struppi.

                                                      --
                                                      Javascript ist toll (Perl auch!)
                                                      1. Sagen wir es doch einfach so, belassen wir das Thema, da wir glaube ich noch tagelang hier weiterstreiten könnten... lies bitte noch einmal die Posts durch, dann weist du von was ich rede!

                                                        Ich meinerseits mache so weiter, wenn ich z.B. irgendwelche Positionsangaben habe, dass ich beim Schreiben die direkte Postion im Array angebe, auch wenn die bspw. mit einer 1 anfängt, so dass ich nicht erst umständlich n-1 fürs schreiben und n+1 fürs auslesen benötige... und geben wir mal ehrlich zu, auf das 1 Element kommt es nun auch nicht darauf an, besonders weil dieses ja als undefined und somit als nicht existent gekennzeichnet wird!

                                                        Grüße

                                                        1. Sagen wir es doch einfach so, belassen wir das Thema, da wir glaube ich noch tagelang hier weiterstreiten könnten... lies bitte noch einmal die Posts durch, dann weist du von was ich rede!

                                                          ich weiss 100% wovon du redest, aber offensichtlich erschliest sich dir nicht das was ich dir sagen möchte, keine Ahnung warum.

                                                          Ich meinerseits mache so weiter, wenn ich z.B. irgendwelche Positionsangaben habe, dass ich beim Schreiben die direkte Postion im Array angebe, auch wenn die bspw. mit einer 1 anfängt, so dass ich nicht erst umständlich n-1 fürs schreiben und n+1 fürs auslesen benötige... und geben wir mal ehrlich zu, auf das 1 Element kommt es nun auch nicht darauf an, besonders weil dieses ja als undefined und somit als nicht existent gekennzeichnet wird!

                                                          Ich kann dir glaube ich 100 Mal sagen, dass ich dir das niemals nicht abstreiten wollte und dass es mir zu keiner Zeit darum ging, dir erzählen zu wollen wie du ein Array ansprichst, das einzige und da sind wir sicher einer Meinung, was ich sagen wollte ist, das ein Array bei null anfängt, ok?
                                                          Das heißt das erste Element ist array[0] - gibt es darüber irgend etwas zu streiten?

                                                          Keine Ahnung warum du meinst ich wollte streiten, ich hab lediglich versucht dir diese einfache Tatsache näher zu bringen.

                                                          Struppi.

                                                          --
                                                          Javascript ist toll (Perl auch!)
                                                          1. Ja klar bin ich deiner Meinung, dass ein Array in JavaScript bei 0 beginnt, das bestreitet doch auch niemand... die einzigste Sprache die mir bekannt ist, bei der ein Array bei 1 beginnt, ist Visual Basic.

                                                            Ich wollte dir nur näher bringen, dass es bei einer Scriptsprache nicht immer sinnvoll ist wirklich bei dem Element 0 anzufangen und dann in der Reihenfolge 1, 2, 3, 4... fortzufahren, wenn man halt nur bestimmte Positionen auf einen bestimmten Wert setzen muss, da JavaScript die Bereiche davor automatisch auffüllt. (Daher beginnt aber dennoch das Array mit 0, auch wenn diese Stelle dann als undefined definiert ist!)
                                                            Würde man diese nützliche Array-Funktion ignorieren, würden viele Scripte zur Abarbeitung länger als erwünscht dauern.

                                                            Grüße

                                                            1. Ja klar bin ich deiner Meinung, dass ein Array in JavaScript bei 0 beginnt, das bestreitet doch auch niemand... die einzigste Sprache die mir bekannt ist, bei der ein Array bei 1 beginnt, ist Visual Basic.

                                                              Quark mit Soße. Auch in VB beginnen Arrays bei 0.

                                                              Würde man diese nützliche Array-Funktion ignorieren, würden viele Scripte zur Abarbeitung länger als erwünscht dauern.

                                                              Ich bezweifele einfach mal, dass es einen großen Unterschied macht, ein Array manuell mit undefined zu füllen oder dies automatisch durch den Browser zu machen.

                                                            2. Ja klar bin ich deiner Meinung, dass ein Array in JavaScript bei 0 beginnt, das bestreitet doch auch niemand...

                                                              doch das klang so

                                                              Ich wollte dir nur näher bringen, dass es bei einer Scriptsprache nicht immer sinnvoll ist wirklich bei dem Element 0 anzufangen und dann in der Reihenfolge 1, 2, 3, 4... fortzufahren, wenn man halt nur bestimmte Positionen auf einen bestimmten Wert setzen muss,

                                                              das war nie die Frage. Aber "man" - also die OP - wollte keine bestimmten indizes gesetzt haben, es ging lediglich um eine Reihenfolge und - da sind wir ja mittlerweile einer Meinung - da ein Array mit dem Index Null anfängt, spricht nichts dagegen auch dieses Element zu benutzen.

                                                              Struppi.

                                                              --
                                                              Javascript ist toll (Perl auch!)
                                        2. Kein Fehler nix ;-)

                                          kein Mensch sprach von einem Fehler, ich fragte dich, warum du nicht ein erzeugtes Array sinnvoll nutzt und in deinem Beispiel das erste Arrayelement leer läßt?
                                          Gibt's dafür irgendeinen Grund?
                                          Ausser das du versuchst ein sprachliches Konstrukt (das erste Element) unnötigerwiese in einem Porgramm umzusetzen?

                                          Struppi.

                                          --
                                          Javascript ist toll (Perl auch!)
                                        3. var arr = new Array();

                                          arr[5] = "test";

                                          alert(arr.length); // ergibt 6

                                          Dein Argument war doch, du würdest ressourcenschonend programmieren.

                                          Aber ist es resourcenschonend, wenn du hier ein Array mit 6 Elementen anlegst, aber nur das mit der Nummer 5 benutzt?

                                          Noch schlimmer wäre ja dein anderes Beispiel: Der Bereich 50-75 wird benötigt - aber der Bereich 0-49 wird natürlich vom Browser ebenfalls schon angelegt und verbraucht mutmaßlich Speicher.

                                          Da ist es dann doch wirklich schlauer, direkt bei 0 anzufangen.

                                          Weil JavaScript so clever ist und die Elemente zuvor mit dem Autowert undefined füllt!

                                          Das gibts aber sicher nicht umsonst.

                                          Besonders die Stelle:

                                          Über die Array-Eigenschaft length läßt sich die Anzahl der Elemente ermitteln, die im entsprechenden Array Platz finden. Wird lesend auf einen nicht existierenden Index zugegriffen, so liefert JavaScript „undefined”. Beim Schreibenden Zugriff auf einen nicht existierenden Index wird das Array bis zu diesem Index mit leeren Speicherplätzen gefüllt und der entsprechende Wert an der gewünschten Stelle angehängt.

                                          Das deutet alles darauf hin, dass Leerelemente Speicherplatz verbrauchen.

                                          Nun gut, die Speicherverwaltung von Javascript geht den Benutzer nichts an. Kann auch sein, dass Leerelemente 0 Byte extra verbrauchen. In anderen Programmiersprachen ist das aber nicht so.

                            2. ...das macht den größten Unterschied zwischen Script- und Programmiersprachen aus!

                              Vielleicht hilft dir ja wikipedia beim Verständniss.

                              Struppi.

                              --
                              Javascript ist toll (Perl auch!)
                            3. hi,

                              Ich entwickle bspw. mit Hilfe von JS und PHP ein Browsergame, wobei ich eine Karte von 2000 x 2000 Felder besitze... brauche ich nur einen Teil dieser Karte, erzeuge ich mir ein Array und fülle bspw. nur den Bereich von [950] bis [1050] mit Werten! Unsinnig und nicht grad Ressourucen schonend wäre es nun jedesmal vorher eine komplette Schleife durchlaufen zulassen, die erst das Array von der Stelle 0 bis 2000 füllen würde, oder ich jedesmal Position - 950 rechnen müsste, damit ich ja bei der Stelle 0 anfange...

                              Was spricht gegen letzteres?
                              Offsets zu benutzen, ist doch das normalste von der Welt.

                              gruß,
                              wahsaga

                              --
                              /voodoo.css:
                              #GeorgeWBush { position:absolute; bottom:-6ft; }
          2. Hi,

            Wenn es vorher ein anderes Ereignis gab, welches Dich später interessieren könnte, was musst Du also damit machen?
            Durch zweifaches Ausführen des Ereignisses Klick gehen mir allerdings die Werte des ersten Ereignisses Klick verloren.

            und um zu verhindern, dass Dir etwas verloren geht, musst Du ...

            Auch wie ich die Daten zwischenspeichern kann ist mir unklar,

            ... sie zwischenspeichern. Was daran ist Dir unklar?

            da ich nach zweimaligen Ausführen eines Ereignisses das jeweils vorangehende überschreibe, oder sehe ich das falsch?

            Was Du wann, wie und ob überhaupt überschreibst, liegt voll und ganz unter Deiner Kontrolle.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
  2. Hi,

    Mit dieser Variante bekomme ich allerdings nur einen Punkt ausgegeben.

    nein, beliebig viele. Oder stoppt das Script, nachdem ein Punkt ermittelt wurde?

    Die Funktion onclick kann ich leider nur einmal auf einer Seite auswählen.

    Auch das ist nicht richtig, aber sei's drum.

    Gibt es eine Möglichkeit, zwei Koordinaten zu ermitteln, evtl. auch ohne onclick, oder kann ich onclick zweimal ausführen?

    Das click-Event feuert bei jedem Klick auf das entsprechende Element. Eine im onclick-Handler hinterlegte Funktion wird also bei jedem Klick ausgeführt. Da niemand außer Dir zwischen einem "ersten" und einem "zweiten" Klick unterscheiden wird, musst Du entsprechende Grundlagen für eine solche Unterscheidung treffen. Die einfachste Unterscheidungsvariante ist, sich schlicht und ergreifend zu merken, dass der erste schon geschehen ist.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes