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 28.09.2010, 18:42  
hts
Erfahrener Benutzer
 
Registriert seit: 07.09.2010
Beiträge: 722
PHP-Kenntnisse:
Fortgeschritten
hts befindet sich auf einem aufstrebenden Ast
Standard Closure + Parameter in Variable speichern

Hi Leute,

ich möchte einem Event einen Parameter mitgeben. Ich denke, dazu benutzt man in Javascript Closures. Hier mal meine ersten Gehversuche dazu (Code auf das Notwendigste gekürzt):
Code:
var PieceTypes = new Array('Q', 'R', 'B', 'N');

for(var I = 0; I < PieceTypes.length; I ++)
{
        var PieceType = PieceTypes[i];
	var Image = document.createElement('img');
	
	Image.onclick = function()
	{
		var PromotionPieceType = PieceType;

		var Closure = function()
		{
			alert(PromotionPieceType);
		}

		Closure();
	}
}
In der äußeren Eventfunktion speichere ich den Parameter in var PromotionPieceType = PieceType. Bei einem Klick auf ein Bild sollte jetzt der entsprechnde Wert ('Q', 'R', 'B' oder 'N') ausgegeben werden, aber es wird immer der letzte Wert "N" ausgegeben, egal auf welches Bild ich klicke. Also scheinbar wird dieser in der Schleife überschrieben

Wie macht man es richtig?
hts ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 28.09.2010, 19:21  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Ohje Schleifen und Callbacks. Ganz unorthodox:
Code:
var PieceTypes = new Array('Q', 'R', 'B', 'N');

for(var I = 0; I < PieceTypes.length; I ++)
{
        var PieceType = PieceTypes[i];
	var Image = document.createElement('img');
        Image.data = PieceType;
	
	Image.onclick = function()
	{
		alert(this.data);
	}
}
ungetestet
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 28.09.2010, 19:31  
hts
Erfahrener Benutzer
 
Registriert seit: 07.09.2010
Beiträge: 722
PHP-Kenntnisse:
Fortgeschritten
hts befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Chriz Beitrag anzeigen
Ohje Schleifen und Callbacks. Ganz unorthodox:
Code:
var PieceTypes = new Array('Q', 'R', 'B', 'N');

for(var I = 0; I < PieceTypes.length; I ++)
{
        var PieceType = PieceTypes[i];
	var Image = document.createElement('img');
        Image.data = PieceType;
	
	Image.onclick = function()
	{
		alert(this.data);
	}
}
ungetestet
Jetzt ist es getestet - funktioniert!
Coole Idee, die Daten einfach ins DOM-Element zu hängen.

Du meinst also, prinzipiel ist mein Code richtig, aber kann innerhalb einer Schleife nicht benutzt werden?

PS: Oben in meinem Code heißt es natürlich var PieceType = PieceTypes[i]; - Ich wollte es ändern, aber im Editor ist ein großes "I".
[EDIT] komisch, hier wird auch wieder ein kleines "i" gezeigt, obwohl es ein großes ist.

Geändert von hts (28.09.2010 um 19:38 Uhr).
hts ist offline   Mit Zitat antworten
Alt 28.09.2010, 21:50  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Benutz dafür bitte ein Framework. Memory leaks sind nicht sehr schön. Siehe z.b. jquery data
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Alt 28.09.2010, 23:21  
hts
Erfahrener Benutzer
 
Registriert seit: 07.09.2010
Beiträge: 722
PHP-Kenntnisse:
Fortgeschritten
hts befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von rudygotya Beitrag anzeigen
Benutz dafür bitte ein Framework. Memory leaks sind nicht sehr schön. Siehe z.b. jquery data
Ja, vermutlich hast du recht, dass ein JS-Framework einem viel Arbeit abnimmt. Aber die komische jQuery-Syntax mit dem $-Zeichen hat mich auf den ersten Blick abgeschreckt.
Code:
$('body').data('foo', 52);
Ich schreibe mir z.Z meine JS-Funktionen/Tools/Helper selbst, weil ich die Einarbeitung in ein Framework (inkl. dessem Overhead) scheue. Vermutlich investiere ich dabei mehr Zeit mit der Entwicklung und dem Testen, vor allem Cross-Browser-Testen, als in die Einarbeitung in ein FW.

Naja, vielleicht werde ich noch vernünftig (wenn es komplexer wird) ...
hts ist offline   Mit Zitat antworten
Alt 28.09.2010, 23:40  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hallo,

also wenn du dich ein bisschen mit JS auskennst ist jQuery wunderbar intuitiv. Ich kanns wirklich nur empfehlen. Das Problem beim Selberschreiben ist eben, aber das weisst du sicherlich, dass es in deinem Browser einwandfrei funktioniert, im naechsten oder sogar in einer anderen Version wiederum nicht. Aber davon erfaehrst du moeglicherweise nie, weil die User deine Seite besuchen, es nicht funktioniert, und dann wieder verschwinden.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 29.09.2010, 16:41  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

PHP-Code:
var PieceTypes = ['Q''R''B''N'];

for (
PieceType in PieceTypes)  {
  var 
Image document.createElement('img');
  
  
Image.onclick = function (Type) {
      return function () {
        
alert (Type);
      };
  } (
PieceType);

ungetestet.

[edit]

Jetze.

PHP-Code:
var PieceTypes = ['Q''R''B''N'];

for (
Index in PieceTypes)  {
  var 
PieceType PieceTypes[Index];
  var 
Image     document.createElement('img');
  
  
Image.onclick = function (Type) {
      return function () {
        
alert (Type);
      };
  } (
PieceType);

__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (29.09.2010 um 16:52 Uhr).
nikosch ist offline   Mit Zitat antworten
Alt 29.09.2010, 16:44  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Das klappt? Ist mir komplett neu die Syntax.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 29.09.2010, 16:53  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Jetzt ja.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 29.09.2010, 19:05  
hts
Erfahrener Benutzer
 
Registriert seit: 07.09.2010
Beiträge: 722
PHP-Kenntnisse:
Fortgeschritten
hts befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
PHP-Code:
var PieceTypes = ['Q''R''B''N'];

for (
Index in PieceTypes)  {
  var 
PieceType PieceTypes[Index];
  var 
Image     document.createElement('img');
  
  
Image.onclick = function (Type) {
      return function () {
        
alert (Type);
      };
  } (
PieceType);

Ja, funktioniert - nur verstehe ich garnicht, was da passiert

(PieceType); ist bei der verschachtelten Funktionen, der Parameter für die Innere. Nur gibt es hier keine Innere sondern den return einer Funktion?

Habe gerade nochmal etwas probiert.
PHP-Code:
  Image.onclick = function (PieceType) {
        
alert (PieceType);
  } 
Damit bekomme ich das Eventobjekt selbst.
Ich frage mich, wodurch in deinem Beispiel plötzlich der Parameter "Type" plötzlich belegt wird?

Das ist doch schwarze Magie
hts 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
Auswahlwert in Variable speichern sLaps JavaScript, Ajax und mehr 3 20.09.2010 14:20
[Erledigt] inhalt einer while schleife in eine variable speichern ePole PHP Tipps 2010 20 17.07.2010 11:40
MySql Suchergebnis in eine Variable speichern TheSymo PHP Tipps 2010 3 21.05.2010 08:56
[Erledigt] Ergebnis in eine Variable speichern sl0t PHP Tipps 2010 7 10.02.2010 13:04
Wert aus Datenbank in Variable speichern Extremefall PHP Tipps 2009 11 15.12.2009 16:30
[Erledigt] Parameter aus URL speichern dna PHP Tipps 2009 13 18.03.2009 07:22
javascript funktion(ergebnis) in php variable speichern martl666 PHP Tipps 2008 3 29.12.2008 17:13
Werte ein Variable speichern aceras PHP Tipps 2008 3 09.11.2008 12:09
[Erledigt] Variable Anzahl Parameter bie build-in-functions sqrt PHP Tipps 2008 16 25.05.2008 23:00
String aus einer Seite in Variable speichern KimKaye PHP Tipps 2008 10 14.05.2008 09:57
Variable als optionalen Parameter? Mex PHP Tipps 2006 3 20.04.2006 07:05
Auswahl als Variable ausgeben / in DB speichern PHP Tipps 2006 3 14.01.2006 13:08
Feedback von URL-Aufruf in Variable speichern PHP Tipps 2007 3 17.12.2005 18:50
text zwischen xx und xx in variable speichern? md5hash PHP Tipps 2005-2 3 13.09.2005 18:28
[Erledigt] Variable speichern PHP Tipps 2005 9 24.02.2005 14:39

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php closure, php parameter in variable speichern, variablenwerte bei js deutsch, javascript function closure, execute a piece of code var ausgeben, php clousere parameter, javascript onclick wert mitgeben, php rückgabe einer funktion in variable speichern, funktion parameter variable speichern, php url speichern mit parametern, java variable vom typ closure, php onclick variable speichern, parameter an variable; php, javascript klick auf bild in variable speichern, onclick variablenwert php speichern, onclick javascript ergebnis php speichern, google closure param, jquery variable wert ausgeben, javascript onclick alert function php varible ausgeben, return variable speichern javascript

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:59 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