PSD-Tutorials.de
Forum für Design, Fotografie & Bildbearbeitung
Tutkit
Agentur
Hilfe
Kontakt
Start
Forum
Aktuelles
Besonderer Inhalt
Foren durchsuchen
Tutorials
News
Anmelden
Kostenlos registrieren
Aktuelles
Suche
Suche
Nur Titel durchsuchen
Von:
Menü
Anmelden
Kostenlos registrieren
App installieren
Installieren
JavaScript ist deaktiviert. Für eine bessere Darstellung aktiviere bitte JavaScript in deinem Browser, bevor du fortfährst.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen
alternativen Browser
verwenden.
Antworten auf deine Fragen:
Neues Thema erstellen
Start
Forum
Sonstiges
Webdesign, Webentwicklung & Programmierung
PHP, Javascript, jQuery, Ajax, nodeJS, MySQL...
Javascript: Array Werte tauschen
Beitrag
<blockquote data-quote="mindraper" data-source="post: 1924843" data-attributes="member: 115163"><p><strong>AW: Javascript: Array Werte tauschen</strong></p><p></p><p>hi.</p><p></p><p></p><p></p><p>erstmal ein paar erklärungen zu den farblich markierten teilen:</p><p>ROT = hier liegt ein fehler vor</p><p>GRÜN = ursprüngliche fehler, hier schonmal gefixt</p><p>ORANGE = kein fehler aber unsauber, sollte man anders machen</p><p></p><p>ich fange jetzt mal von oben an:</p><p></p><p><strong>verschieben( id )</strong></p><p>ich vermute mal, du hast dir selber etwas ins bein geschossen. du vergibst an verschieben() den parameter "id". "id" ist eine zahl, daher findest du darin keinerlei unterstrich o. ä.. siehe auch punkt 2. </p><p>das ist der grund, wieso die function crashed, sobald die schleife mit break; beendet wird. es ist nicht das break; selbst.</p><p>vermutlich möchtest du aber das id-attribut des jeweils geklickten bildes übergeben. das funktioniert, wenn du dem onclick-eventlistener im HTML sagst:</p><p></p><p>[PHP]onclick="function(){ verschieben( this.attributes['id'].value )}"[/PHP]</p><p></p><p>wieso das so ist, hängt mit dem gültigkeitsbereich einer function und dem daraus resultierenden zeiger von "this" zusammen. mehr dazu findest du . es handelt sich hierbei um einen ( zugegeben ) abstrakten aber dennoch fundamentalen aspekt in javascript. </p><p></p><p>die orangenen bereiche, die ich dir markiert habe sind "bad practice". und zwar insofern, als dass javascript beim initialisieren einer function zunächst den scope bildet ( also den gültigkeitsbereich ) und dann die variablen initialisiert. ob diese dabei in einer for-schleife stecken oder nicht, ist javascript vollkommen egal. das kannst du ganz leicht einmal prüfen, indem du ( falls noch nicht geschehen ) firebug installierst ( ist ein firefox-addon ), die konsole öffnest und eine html-datei lädst, in der du folgenden code ausführst ( ohne einen anderen schnipsel am besten ):</p><p>[PHP]</p><p>window.onload = function(){</p><p></p><p>function testScope( maximum ){</p><p>var maxCount = maximum;</p><p></p><p>for( var i = 0; i < maxCount; i = i+1 ){</p><p> console.log( i );</p><p>}</p><p></p><p>for(; i > -1; i -= 1 ){</p><p> console.log( i );</p><p>}</p><p></p><p>};</p><p></p><p>testScope( 10 );</p><p></p><p>};</p><p>[/PHP]</p><p></p><p>würde der gültigkeitsbereich von i auf innerhalb der for-schleife begrenzt bleiben, dürfte die untere schleife nicht funktionieren. aber sie funktioniert, weil alle innerhalb einer function deklarierten variablen einen gültigkeitsbereich haben der innerhalb der function <strong>global</strong> ist, egal wo sie deklariert wurden.</p><p></p><p>mit "bad practice" meine ich, dass du eigentlich 2 variablen deklarierst, die den gleichen namen haben. das musst du nicht anders tun, es führt aber zu schönerem und leichter verständlichem code wenn du es anders machst.</p><p></p><p><strong>mischen()</strong></p><p>du lässt in deiner for-schleife der variablen "id" jedesmal eine zufällig generierte zahl zuweisen ( das ist kein problem ). dann übergibst du diese zahl an verschieben(). hier beginnt das eigentliche problem, denn es ist der grund, weshalb in verschieben in dem fall eine zahl ankommt statt eines strings und die function nach der schleife fehlschlägt – es wird ein string erwartet, aber eine zahl vorgefunden. für zahlen gibt es die methode "indexOf" des String-objects aber nicht.</p><p></p><p><strong>generieren()</strong></p><p>das setzen von innerHTML geht leichter, als du es getan hast. du brauchst dafür nicht zwingend das aktuelle HTML in einem element auslesen, erweitern und dann erst neu zuweisen ( diese reihenfolge liegt am "="-operator, der von rechts nach links arbeitet. also rein logisch anders herum, als beispielsweise in der mathematik ). das bestehende HTML zu erweitern funktioniert auch, indem du einfach "+=" schreibst.</p><p></p><p>hoffe das hilft</p></blockquote><p></p>
[QUOTE="mindraper, post: 1924843, member: 115163"] [b]AW: Javascript: Array Werte tauschen[/b] hi. erstmal ein paar erklärungen zu den farblich markierten teilen: ROT = hier liegt ein fehler vor GRÜN = ursprüngliche fehler, hier schonmal gefixt ORANGE = kein fehler aber unsauber, sollte man anders machen ich fange jetzt mal von oben an: [B]verschieben( id )[/B] ich vermute mal, du hast dir selber etwas ins bein geschossen. du vergibst an verschieben() den parameter "id". "id" ist eine zahl, daher findest du darin keinerlei unterstrich o. ä.. siehe auch punkt 2. das ist der grund, wieso die function crashed, sobald die schleife mit break; beendet wird. es ist nicht das break; selbst. vermutlich möchtest du aber das id-attribut des jeweils geklickten bildes übergeben. das funktioniert, wenn du dem onclick-eventlistener im HTML sagst: [PHP]onclick="function(){ verschieben( this.attributes['id'].value )}"[/PHP] wieso das so ist, hängt mit dem gültigkeitsbereich einer function und dem daraus resultierenden zeiger von "this" zusammen. mehr dazu findest du . es handelt sich hierbei um einen ( zugegeben ) abstrakten aber dennoch fundamentalen aspekt in javascript. die orangenen bereiche, die ich dir markiert habe sind "bad practice". und zwar insofern, als dass javascript beim initialisieren einer function zunächst den scope bildet ( also den gültigkeitsbereich ) und dann die variablen initialisiert. ob diese dabei in einer for-schleife stecken oder nicht, ist javascript vollkommen egal. das kannst du ganz leicht einmal prüfen, indem du ( falls noch nicht geschehen ) firebug installierst ( ist ein firefox-addon ), die konsole öffnest und eine html-datei lädst, in der du folgenden code ausführst ( ohne einen anderen schnipsel am besten ): [PHP] window.onload = function(){ function testScope( maximum ){ var maxCount = maximum; for( var i = 0; i < maxCount; i = i+1 ){ console.log( i ); } for(; i > -1; i -= 1 ){ console.log( i ); } }; testScope( 10 ); }; [/PHP] würde der gültigkeitsbereich von i auf innerhalb der for-schleife begrenzt bleiben, dürfte die untere schleife nicht funktionieren. aber sie funktioniert, weil alle innerhalb einer function deklarierten variablen einen gültigkeitsbereich haben der innerhalb der function [B]global[/B] ist, egal wo sie deklariert wurden. mit "bad practice" meine ich, dass du eigentlich 2 variablen deklarierst, die den gleichen namen haben. das musst du nicht anders tun, es führt aber zu schönerem und leichter verständlichem code wenn du es anders machst. [B]mischen()[/B] du lässt in deiner for-schleife der variablen "id" jedesmal eine zufällig generierte zahl zuweisen ( das ist kein problem ). dann übergibst du diese zahl an verschieben(). hier beginnt das eigentliche problem, denn es ist der grund, weshalb in verschieben in dem fall eine zahl ankommt statt eines strings und die function nach der schleife fehlschlägt – es wird ein string erwartet, aber eine zahl vorgefunden. für zahlen gibt es die methode "indexOf" des String-objects aber nicht. [B]generieren()[/B] das setzen von innerHTML geht leichter, als du es getan hast. du brauchst dafür nicht zwingend das aktuelle HTML in einem element auslesen, erweitern und dann erst neu zuweisen ( diese reihenfolge liegt am "="-operator, der von rechts nach links arbeitet. also rein logisch anders herum, als beispielsweise in der mathematik ). das bestehende HTML zu erweitern funktioniert auch, indem du einfach "+=" schreibst. hoffe das hilft [/QUOTE]
Bilder bitte
hier hochladen
und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Zitate einfügen…
Authentifizierung
Wenn ★ = 12, ◇ = 4 und die Hälfte von ★ zu ◇ addiert wird, was ist das Ergebnis?
Antworten
Start
Forum
Sonstiges
Webdesign, Webentwicklung & Programmierung
PHP, Javascript, jQuery, Ajax, nodeJS, MySQL...
Javascript: Array Werte tauschen
Oben