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

[FRAGE] Problem mit Funktionsaufruf

jsneulingg

New member
Hallo,

ich bin absoluter Anfänger in Sachen JavaScript und beschäftige mich erst seit ein paar Tagen damit.
Und zwar ich habe ein Problem welches ich die letzten drei Stunden mit Suchmaschine etc. einfach nicht lösen konnte.

Situation:

Mit JavaScript habe ich ein <div> erzeugt, in welchen sich der Aufruf "onclick" befindet. Mit dem onclick soll eine Funktion geöffnet werden. An und für sich kein Problem.
Mein Problem ist die Variablen-Übergabe. Diese bricht auf Grund von einen Syntax-Fehler ständig ab. Ich weiß langsam einfach nicht mehr wie ich die Syntax noch gestalten kann ...


Hier mal mein Code in welchen sich der Fehler definitiv befindet:

HTML:
'<div onclick="showBearbeitenLeiste(' + i + ',' + jsArr.bookmarks[ i ].url + ',' + jsArr.bookmarks[ i ].name + ')"> A </div>'

Die Variable i rührt daher, da sich dieser DIV-Block in einer for-Schleife befindet (Ausgabe einer Übersicht von Links). Wenn ich auf dem oben genannten Link klicke, dann soll sich ein Block öffnen bei welchen ich den ausgewählten Link bearbeiten kann.

Zwischenzeitlich hatte ich ein paar mal erreicht, dass die Syntax richtig war, allerdings wurde dann immer nur der Wert des letzten Eintrages aus meinen Array übergeben. Die Datenbankeinträge der Lesezeichen, habe ich von PHP per json übergeben.

Hier noch ein Screenshot der aktuellen Fehlermeldung, welche ich durch "Firebug" bekomme.
SyntaxError_pic.png


Ich hoffe ihr könnt mir meine Verzweiflung nehmen und mir helfen :)


lg
 
Du musst den zweiten und dritten Parameter in Hochkommata setzen mit Escaping. Beim ersten geht es ohne, weil das ein nummerischer Wert ist.
Also:
Code:
'<div onclick="showBearbeitenLeiste(' + i + ',\'' + jsArr.bookmarks[ i ].url + '\',\'' + jsArr.bookmarks[ i ].name + '\')"> A </div>'
 
Zuletzt bearbeitet:
[OFF-TOPIC]
Ich versteh wirklich nicht, warum hier viele andauernd in JavaScript Links & Tutorials ihre Fragen stellen, wenn es doch ein ganz großes Unterforum mit dem schlichten, einfachen und aussagekräftigen Namen "JavaScript" gibt... ;)
[/OFF-TOPIC]
 
Hi,

so funktioniert es danke mikdoe :)
Den Gedanke mit dem maskieren hatte ich auch allerdings bekam ich immer eine Fehlermeldung welche auf das Backslash gezeigt hatte.

Ich versteh wirklich nicht, warum hier viele andauernd in JavaScript Links & Tutorials ihre Fragen stellen, wenn es doch ein ganz großes Unterforum mit dem schlichten, einfachen und aussagekräftigen Namen "JavaScript" gibt...

Sorry ich dachte das diese Kategorie passender für Anfänger und die Hauptkategorie "JavaScript" eher für Fortgeschrittene ;) Ich passe das nächste mal besser auf.


Lg
 
Sorry ich dachte das diese Kategorie passender für Anfänger und die Hauptkategorie "JavaScript" eher für Fortgeschrittene ;) Ich passe das nächste mal besser auf.
So schlimm ist das nicht. Kannst du denn benennen, aufgrund was du das dachtest? Vielleicht müssen wir die Beschriftungen der Unterforen verbessern?

- - - Aktualisiert - - -

Den Gedanke mit dem maskieren hatte ich auch allerdings bekam ich immer eine Fehlermeldung welche auf das Backslash gezeigt hatte.
Hast du vielleicht Anführungszeichen anstatt Hochkommata verwendet? Das geht nicht, weil die ja schon das Inline JS umschließen.
 
Hast du vielleicht Anführungszeichen anstatt Hochkommata verwendet? Das geht nicht, weil die ja schon das Inline JS umschließen.

Ich habe wirklcih alles ausprobiert nur das richtige eben nicht. Also mit Hochkommate und mit Anführungszeichen, sowie in unterschiedlichen Variationen mit Backslash.
Bei mein Ursprungscode war diese Zeile mit normalen Anführungszeichen und ich dachte das es dadurch zu einen Fehler kommt und habe die komplette Zeile mit Hochkomma umschlossen.
Die Maskierungs-Slashes hatte ich glaube meist eine Stelle weiter rechts als es richtig gewesen wäre ;)
Das Problem ob mit Anführungszeichen oder Hochkomma und auch ob Backslash oder unmaskiert. Meist hatte ich als Ergebnis entweder " LEER " oder als Ausgabe mit alert( var ) nur den Variablenname.


So schlimm ist das nicht. Kannst du denn benennen, aufgrund was du das dachtest? Vielleicht müssen wir die Beschriftungen der Unterforen verbessern?

Ich dachte es aufgrund dessen das mehrere Themen angegeben sind. JavaScript PHP ... & Tutorials.
Dies Tutorials habe ich aufgrund des & als Zusatz im Einsteigerbereich gedeutet ;)
 
Ich dachte es aufgrund dessen das mehrere Themen angegeben sind. JavaScript PHP ... & Tutorials.
Dies Tutorials habe ich aufgrund des & als Zusatz im Einsteigerbereich gedeutet ;)
Ah ja, OK. Bin da noch gar nicht draufgekommen, aber das klingt einleuchtend. Müssen wir mal über eine Umbenennung nachdenken...
 
@jsneulingg: inline-Eventlistener sollte man nicht verwenden - teilweise aus diesen Gründen. Wenn du den Listener sauber setzt, hast du das ganze Problem mit dem Escapen nicht:
Code:
var div = document.createElement("div");
div.innerHTML = " A ";
div.addEventListener(
	"click",
	(function(i){
		return function(){
			showBearbeitenLeiste(i, jsArr.bookmarks[i].url, jsArr.bookmarks[i].name);
		};
	}(i)),
	false
);

ELEMENT_IN_DAS_DAS_DIV_REIN_SOLL.appendChild(div);
 
Das solltest du aber schon direkt aus dem Klassennamen oder der ID ablesen können.

Auch haben inline-Eventlistener ärgerliche Nebeneffekte (z.B. seltsamer Scope bei <form>-Elementen).

Und wenn man im Listener ein bisschen kompliziertere Sachen machen will, kann das auch nicht mehr gescheit rauslesen (oder das HTML wird komplett unleserlich).

Zu guter Letzt ist die alte Trennung von Daten und Funktionalität schon sinnvoll...

PS: hier sieht es aber so aus, als würde das Element erst mit JS erzeugt werden und da ergeben inline-Eventlistener noch weniger Sinn.
 
Und ich meine auch mal erlebt zu haben, dass bei Inline JS nicht unbedingt jeder Browser die Kommandos in ihrer Reihenfolge von links nach rechts ausführt sondern eher zufällig. Kann das sein? Oder war das mal so? Hab es jetzt länger nicht mehr gesehen.
 
Zurück
Oben