Elemente mit dem Attribut contenteditable können direkt im Browserfenster live bearbeitet werden. Aber natürlich wirken sich diese Änderungen nicht auf das eigentliche Dokument auf Ihrem Server aus, sodass diese Änderungen beim Aktualisieren der Seite nicht erhalten bleiben.
Eine Möglichkeit, die Daten zu speichern, wäre, auf das Drücken der Eingabetaste zu warten, was dann die neue innerHTML des Elements als Ajax-Aufruf auslöst und das Element ausblendet. Durch Drücken der Escape-Taste wird das Element in seinen vor der Bearbeitung befindlichen Zustand zurückversetzt.
document.addEventListener('keydown', function (event) {
var esc = event.which == 27,
nl = event.which == 13,
el = event.target,
input = el.nodeName != 'INPUT' && el.nodeName != 'TEXTAREA',
data = {};
if (input) {
if (esc) {
// restore state
document.execCommand('undo');
el.blur();
} else if (nl) {
// save
data[el.getAttribute('data-name')] = el.innerHTML;
// we could send an ajax request to update the field
/*
$.ajax({
url: window.location.toString(),
data: data,
type: 'post'
});
*/
log(JSON.stringify(data));
el.blur();
event.preventDefault();
}
}
}, true);
function log(s) {
document.getElementById('debug').innerHTML = 'value changed to: ' + s;
}
Siehe den Stift Contenteditable / Speichern mit JSON/Ajax von Chris Coyier (@chriscoyier) auf CodePen.
Ich verstehe nicht, wie man das auf dem Server speichert. Ich habe versucht, die Kommentarzeichen einfach zu entfernen, damit das Ajax funktioniert, aber ohne Erfolg. Jemand?
Schauen Sie hier mal vorbei, ich habe ein paar einfache Änderungen vorgenommen, die es Ihnen ermöglichen, direkt in eine HTML-Datei zu lesen/schreiben, die contentEditable-Änderungen von jedem benannten
<div class='editable'>-Tag. Ich habe den Code auf GitHub gestellt, hier ist eine vollständige Erklärung,http://www.abrandao.com/2019/12/saving-contenteditable-html-using-php/
Was ist, wenn der Benutzer rückgängig gemacht hat (Strg+Z oder Apfel+Z)? Dann wird das contenteditable-Element in seinen vorherigen Zustand zurückversetzt, aber die Rückgängigmachung wird nicht in der Datenbank gespeichert. Gibt es eine plattformübergreifende Möglichkeit, dies zu erkennen?
damit es auch mit FF funktioniert
document.execCommand('undo', false, null); // auf vorherigen Zustand zurücksetzenWie speichere ich die Ausgabe in einem Cookie, damit sie beim Aktualisieren oder Schließen der Seite immer noch vorhanden ist?
Danke
Dan
Kann ich auch auf Mausklicks außerhalb des bearbeitbaren Inhalts reagieren?
Hallo, ich versuche, das Ergebnis in der Datenbank zu speichern, aber wenn ich das Ergebnis abrufe, wird es ohne Formatierung als einfacher Klartext ausgegeben. Ich benutze PHP, kann mir jemand helfen?
Vielen Dank im Voraus
1) Warum würde man danach ausblenden?
2) Warum verlinken alle auf dieses komische JS Bin – das NICHT funktioniert?
Bitte DEMO aktualisieren
Hier bitteschön
http://codepen.io/chriscoyier/pen/LVEdJg
Das „keydown“-Ereignis verhält sich wie das „input“-Ereignis seltsam (nach meinem Geschmack), wenn mehrere contenteditable-Elemente verschachtelt sind.
Wenn ich z. B. das Attribut contenteditable zu „body“ hinzufüge, wird dieser Demo-Code unterbrochen. Das liegt daran, dass „event.target“ in diesem Fall body sein wird, da es ein älterer contenteditable-Vorfahre ist. Wenn Sie also mehrere contenteditable-Elemente auf Ihrer Seite haben, sollten Sie darauf achten, dass keines davon verschachtelt ist.
Quelle: https://developer.mozilla.org/en-US/docs/Web/Events/input
Funktioniert immer noch im Jahr 2018. Bester und sauberer ContentEditable-Listener zum Speichern von Änderungen auf dem Laufenden und ohne sich mit den Standardverhalten von Enter und Esc zu ärgern. Ich habe das verwendet, um Änderungen in dataTable zu speichern. Danke, Mann!
Gibt es eine IDE, die das lokal macht? Ich frage für einen Freund, der eine Bootstrap-Vorlage bearbeiten möchte.