Wie gebe ich Dictionary einer Funktion in Javascript mit?
Hallo, ich kriege folgende Fehlermeldung bei meinem Code: "Uncaught SyntaxError: Unexpected identifier" und weiß nicht wie ich mein dict meine onclick so übergebe, dass ich anschließend damit weiterarbeiten und iterieren kann. Als Beispiel für mein Problem habe ich folgende kleine anwendung geschrieben:
script.js:
function geklickt(dictionary){
$('#Entries').text(dictionary);
}
var dict =
{'lizens':
{'Apache License 2.0':
{'value': 23,
'paths': ['Bernd', 'Hans'],
'id': '342345'}},
'rechte':
{'Copyright (c) 2013-2020 the original author or authors': 3},
'authoren':
{'Bexter': 6, 'senior': 6},
'fileTypes': [0, 21, 0, 0, 0, 0, 0, 0, 44],
}
$("#buttons").append(`<button href="#"onclick="geklickt(${dict})">drücken</a></button>`);
test.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body >
<ul id="buttons"></ul>
<p id="Entries"></p>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="{{ url_for('static', filename='assets/js/scripts.js') }}"></script>
</body>
</html>
Also meine Frage ist wie ich jetzt mein dict der onclick übergebe damit es am ende ausgegeben werden kann. In meiner eigentlichen Anwendung will ich damit natürlich noch weiterarbeiten, also vlt auch so dass ich es anschließend noch iterieren kann. Ich bin recht neu und kenne den Zusammenhang zwischen String und Dictionary noch nicht richtig, kann ich bei einem Dictionary iterieren wenn es als string vorliegt oder ist Dictionary eine art eigene Datenstruktur?
Danke schonmal im Voraus.
1 Antwort
$("#buttons").append(`<button href="#"onclick="geklickt(${dict})">drücken</a></button>`);
Auf dieser Zeile fügst du dict in einen String ein. Das ganze dict-Objekt wird dann also in einen String umgewandelt und dann dort eingefügt. Ich weiss jetzt auch nicht genau, was da dein Ziel ist...
Auf welcher Zeile tritt der Fehler überhaupt auf? Das steht in der Fehlermeldung.
Also ich würde den onclick Listener direkt mit nativen Javascript Funktionen dem Button hinzufügen. Wie das genau mit jQuery geht, weiss ich nicht, das Framework ist schon wirklich alt geworden...
Ein neues Element wird erstellt und in die Variable gespeichert. Dort kannst du dann zum Beispiel einen Event Listener anfügen (weiss nicht mehr genau, wie das mit jQuery geht):
let button = $("<button>Hier drücken</button>");
button.on("click", () => { /*hier callback und dein dict benutzen*/ });
// Dann den erstellten Button appenden:
$("#buttons").append(button);
Aber auf keinen Fall würde ich das so machen, wie du das jetzt machst. Das durch einen String durchzureichen ist zu viel gebastel.
$("#buttons").append(`<li class="Seite-item"><a class="Seiten-aufruf" href="#"onclick="getklickt(${dict})">${Zähler}</a></li>`);
wenn das jetzt der button in meinem Projekt ist, wie genau mach ich das in nativem javascript mit den klassen und dem </a> ?
Bei meinem Testbeispiel hats funktioniert wie dus beschrieben hast.
let button = $(`<li class="Seite-item"><a class="Seiten-aufruf" href="#">${Zähler}</a></li>`);
button.on("click", () => { getklickt(dict) });
// Dann den erstellten Button appenden:
$("#buttons").append(button);
So. Einfach den onclick noch aus dem HTML rausnehmen.
Der Fehler tritt beim dem ${Dict} auf, naja also ich will das dictionary Dict der onclick Funktion übergeben. Wenn ich z.b. '$'Dict}' übergebe, dann geht es durch und mit wird (object) Object ausgegeben. Aber ich will ja das dictionary ausgeben.