Eine Seite Zur Zeit arbeite ich an erzeugt ein div mit einem anfänglichen Satz von Werten, wie JSON in einem data-*
Attribut gespeichert:Kann Attribut Anfangsdaten (Daten- *) gelesen, aber nicht Attributdaten aktualisiert lesen kann
die JSON ist:
{"name":"Qm9i","gen":"1","level":"4","topic":"","checked":"eyIxIjoiNCIsIjciOiI0IiwiOCI6IjQiLCI5IjoiNCJ9","pronoun":"2"}
im Element wie folgt aus:
<div id="comment-1" class="container-element" data-all="{"name":"Qm9i","gen":"1","level":"4","topic":"","checked":"eyIxIjoiNCIsIjciOiI0IiwiOCI6IjQiLCI5IjoiNCJ9","pronoun":"2"}">
Es gibt eine Reihe dieser divs, mit einzigartigen IDs, und der Benutzer kann eine abschließende Bearbeitung auf Inhalte innerhalb des div machen (und die Änderungen werden im Datenattribut widergespiegelt) vor der endgültigen Ausgabe.
Wenn der Benutzer klickt auf EDIT, wird die folgende Funktion aufgerufen:
// Get the id of the current comment block
var index = getIndex($(this).attr('id'));
var commentFrame = $('#comment-' + index);
var fr = commentFrame.attr('id');
console.log("Edit button for " + fr + " was clicked...");
var b64 = commentFrame.data('all').checked;
var lvl = commentFrame.data('all').level;
console.log("Retrieved from the bottom of the container...")
console.log("level: " + lvl + " , checked: " + b64 + " or " + atob(b64));
//rest of code here
(Entschuldigung für die Fülle von Log-Anweisungen - Ich habe das Debuggen für eine ganze Weile jetzt ben versuchen)
wenn die EDIT-Taste wird zuerst angeklickt wird, erscheint der Code korrekt auszuführen und die Daten abgerufen werden, wie in der Konsolenprotokoll belegt ...
Edit button for comment-1 was clicked...
Retrieved from the bottom of the container...
level: 4 , checked: eyIxIjoiNCIsIjciOiI0IiwiOCI6IjQiLCI5IjoiNCJ9 or {"1":"4","7":"4","8":"4","9":"4"}
... Änderungen an den Inhalten der div wird, hat in einer anderen Funktion
var details = JSON.parse(parent.attr('data-all'));
details.checked = fdata.checked; //new value for 'checked'
details.level = avg.toFixed(2); //new value for 'level'
// update everything...
parent.attr('data-all', JSON.stringify(details));
... und dies wird sofort in dem Datenattribut für das div (‚Niveau‘ und ‚geprüft‘ mit den neuen Werten aktualisiert reflektiert gemacht, und das Datenattribut beide geändert.
<div id="comment-1" class="container-element" data-all="{"name":"Qm9i","gen":"1","level":"3.25","topic":"","checked":"eyIxIjoiMSIsIjciOiIzIiwiOCI6IjQiLCI5IjoiNSJ9","pronoun":"2"}">
jedoch ...
Das Problem entsteht, wenn Sie bearbeiten auf einer zuvor bearbeiteten div (zum Beispiel, wenn der Benutzer seinen Kopf ein zweites Mal ändert) klicken.
Wie zu erwarten, wird genau derselbe Codeblock oben aufgerufen, aber anstatt die aktualisierten Werte 'level' und 'checked' vom Datenattribut zurückzugeben, gibt er stattdessen die initialen Werte für beide 'level zurück 'und' checked ', die bei der früheren Bearbeitung im Tag überschrieben wurden und nicht mehr erreichbar sein sollten.
Edit button for comment-1 was clicked...
Retrieved from the bottom of the container...
level: 4 , checked: eyIxIjoiNCIsIjciOiI0IiwiOCI6IjQiLCI5IjoiNCJ9 or {"1":"4","7":"4","8":"4","9":"4"}
Ich habe mein Gehirn Abstich und eine Zeit lang bei dieser starren jetzt und immer nirgends, so ich habe gehofft, dass die gut Leute hier könnten in der Lage sein, einen Vorschlag zu bieten, wo könnte ich falsch gehen werden .
'data-all = "{" name ":" Qm9i“, "Gen": "1", "level": "4", "topic": "", "checked": "eyIxIjoiNCIsIjciOiI0IiwiOCI6IjQiLCI5IjoiNCJ9", "Pronomen": "2"} "' wird nicht funktionieren. Sie müssen entscheiden, entweder einzelne äußere Anführungszeichen und doppelte innere Anführungszeichen zu verwenden oder umgekehrt. – connexo