php.de

Zurück   php.de > Webentwicklung > JavaScript, Ajax und mehr

JavaScript, Ajax und mehr dynamisches Scripten und Interaktion auf Clientebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.09.2010, 11:51  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 1.726
PHP-Kenntnisse:
Fortgeschritten
fab ist einfach richtig nettfab ist einfach richtig nettfab ist einfach richtig nettfab ist einfach richtig nett
Standard

In der Schleife definierst du nur die Funktion, exakt so wie geschrieben. Wenn die Funktion dann aufgerufen wird, wird x aus dem global scope benutzt, da die Schleife zu dem Zeitpunkt durchgelaufen ist, ist das eben 2.
fab ist gerade online   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.09.2010, 11:51  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.341
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Aktueller Code (lediglich Variablennamen und Linknamen verändert):
Code:
var targets = new Array('ziel1', 'ziel2');
var links = new Array(document.getElementById('link1'), document.getElementById('link2'));

for(var x=0; x<links.length; x++) {
  links[x].onclick = function() { window.location = targets[x]; };
}
und auch mit window.location.href kommt dennoch undefined.
Ich such auch schon im Netz weiter...

Aber danke Dir für Dein Kopfzerbrechen.



Öhmmm... @fab
Soweit is mir das klar. Aber er muss doch in der Schleife z.B. zum Zeitpunkt x=1 folgendes interpretieren:
Code:
links[1].onclick = function() { window.location = targets[1]; };
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein
Arne Drews ist offline   Mit Zitat antworten
Alt 02.09.2010, 11:53  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.071
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
In der Schleife definierst du nur die Funktion, exakt so wie geschrieben. Wenn die Funktion dann aufgerufen wird, wird x aus dem global scope benutzt, da die Schleife zu dem Zeitpunkt durchgelaufen ist, ist das eben 2.
Ah, macht Sinn und erklärt damit auch dein Problem, Arne.

[edit]
Zitat:
Soweit is mir das klar. Aber er muss doch in der Schleife z.B. zum Zeitpunkt x=1 folgendes interpretieren:
Code:
links[1].onclick = function() { window.location = targets[1]; };
Dort steht nach dem Durchlaufen der Schleife aber offenbar folgendes:

Code:
links[0].onclick = function() { window.location = targets[x]; };
links[1].onclick = function() { window.location = targets[x]; };
Das ist das Problem.
__________________
HalloPHP

Geändert von Asipak (02.09.2010 um 11:58 Uhr).
Asipak ist offline   Mit Zitat antworten
Alt 02.09.2010, 11:58  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 1.726
PHP-Kenntnisse:
Fortgeschritten
fab ist einfach richtig nettfab ist einfach richtig nettfab ist einfach richtig nettfab ist einfach richtig nett
Standard

Zitat:
Zitat von Arne Drews Beitrag anzeigen
Öhmmm... @fab
Soweit is mir das klar. Aber er muss doch in der Schleife z.B. zum Zeitpunkt x=1 folgendes interpretieren:
Code:
links[1].onclick = function() { window.location = targets[1]; };
Nein, das ist dir nicht klar, denn zu dem Zeitpunkt wird überhaupt nichts interpretiert.

Edit: Eine Lösung könnte so aussehen (ungetestet)

Code:
var targets = new Array('ziel1', 'ziel2');
var links = new Array(document.getElementById('link1'), document.getElementById('link2'));
var createOnClick = function(index) { var target = targets[index]; return function() { window.location.href = target; } };
for(var x=0; x<links.length; x++) {
  links[x].onclick = createOnClick(x);
}
fab ist gerade online   Mit Zitat antworten
Alt 02.09.2010, 12:02  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.341
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Oh man...
Klar fab, Du hast recht!

Verdammt, hast Du vielleicht noch'n Verbesserungsvorschlag?
Ah so, hast schon ne Idee. Probier ioch gleich mal. Danke!
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein
Arne Drews ist offline   Mit Zitat antworten
Alt 02.09.2010, 12:13  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.341
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Leider auch so nicht.
Es wird nun direkt nach dem Laden die Funktion ausgeführt.
Das OnClick wird ignoriert.

Schade. Ich schau weiter!
Danke!
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein
Arne Drews ist offline   Mit Zitat antworten
Alt 02.09.2010, 12:21  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 1.726
PHP-Kenntnisse:
Fortgeschritten
fab ist einfach richtig nettfab ist einfach richtig nettfab ist einfach richtig nettfab ist einfach richtig nett
Standard

Komisch, ich habs mal so getestet:

Code:
<html>
<body>
<a id="link1">link 1</a>
<a id="link2">link 2</a>
<script type="text/javascript">
	var targets = new Array('ziel1', 'ziel2');
	var links = new Array(document.getElementById('link1'), document.getElementById('link2'));
	var createOnClick = function(index) { var target = targets[index]; return function() { alert(target); } };
	for(var x=0; x<links.length; x++) {
	  links[x].onclick = createOnClick(x);
	}
</script>
</body>
</html>
und es funktioniert. Zeig mal deinen Code, vielleicht hast du irgendwelche Klammern hinzugefügt?
fab ist gerade online   Mit Zitat antworten
Alt 02.09.2010, 13:23  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.341
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Code:
var createOnClick = function(index) { var target = targets[index]; return function() { window.location.href = target; } };
for(var x=0; x<links.length; x++) {
  links[x].onclick = createOnClick(x);
}
Ich seh' da grad keinen Unterschied. Die Links sind bei mir allerdings mit createElement() erstellt worden.
Das dürfte aber keinen Unterschied machen, denke ich, denn die direkte
Zuweisung funktioniert ja...
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein
Arne Drews ist offline   Mit Zitat antworten
Alt 02.09.2010, 13:28  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Die allgemeine Lösung für die Problematik der Variablenwerte zum Zeitpunkt der Zuweisung des Events vs. Ausführung wären Closures, siehe Organisation von JavaScripten


Alternativ könnte man den benötigten Wert auch einfach als Eigenschaft am Element selber ablegen, so dass man ihn beim Verarbeiten des Events dann dort auslesen kann.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 02.09.2010, 13:48  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.341
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Hi ChrisB,

Das war jetzt auch meine Idee:
Code:
function targetFile(item) { window.location.href = item; }

for(var x=0; x<links.length; x++) {
  links[x].onclick = function() { targetFile(this.name); };
}
zuvor habe ich natürlich den Elementen ein name-Attribut verpasst, z.B.:
Code:
links[0].name = targets[0];
Aber da reagiert er leidser gar nicht mehr auf Klick, sondern versucht die Funktion targetFile() bereits beim Laden der Seite aufzurufen.


EDIT
Hatte auch folgende Variante getestet:
Code:
var targetFile = function(item) { window.location.href = item; }

for(var x=0; x<links.length; x++) {
  links[x].onclick = function() { targetFile(this.name); };
}
mit gleichem Ergebnis.
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein

Geändert von Arne Drews (02.09.2010 um 14:01 Uhr).
Arne Drews ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
IE8 verliert Session Lenki PHP-Fortgeschrittene 10 25.04.2010 01:10
Ein (Teil)Array anhand von level und depth zurückgeben. greatcthulhu Scriptbörse 4 16.04.2010 10:45
PHP Array in javascript verwenden leojango JavaScript, Ajax und mehr 7 08.04.2010 00:40
[Erledigt] array in eine Schleife bearbeiten samij PHP Tipps 2010 4 03.04.2010 00:58
[Erledigt] Tabellen die sich selbst referenzieren Squall PHP Tipps 2009 19 04.08.2009 21:33
[Erledigt] Array Sortieren beist PHP Tipps 2009 4 10.07.2009 08:53
[Erledigt] array sortieren PHP Tipps 2004 17 13.05.2009 10:44
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
Array Formatierung PHP Tipps 2006 3 17.01.2006 19:12
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25
bbcode - Classe PHP-Fortgeschrittene 4 18.09.2004 17:30
Array mit while Schleife auslesen PHP Tipps 2004 7 26.06.2004 19:56

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
for schleife in onclick, onclick in schleife, javascript schleife onclick, javascript for-schleife in onclick, javascript array schleife getelementbyid, javascript onclick schleife, onclick schleife, ie8 reagiert nicht auf click event, java script array onclick, javascript onclick events array loop, onclick per schleife javascript, javascript schleife onclick 1, schleife onclick, php onclick array sortieren, javascript onclick for schleife, for loop click, for loop onclick, onclick mit for schleife, php onclick schleife, javascript onclick in for-schleife

Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum