Warum Ist Mein Contenteditable Cursor Springt an das Ende in Chrome?

Szenario

Ich habe eine contenteditable <div> Bereich, und in diesem Bereich habe ich vielleicht einige <span contenteditable="false"></span> mit etwas text. Die Idee ist, diese span-Elemente dar, formatierten text kann nicht bearbeitet, aber gelöscht werden können, die von der <div contenteditable="true"></div> Bereich durch drücken der "backspace" - Taste.

Problem

Den cursor-Platzierung ist das große Thema hier. wenn Sie löschen eine dieser <span> Elemente, springt der cursor an das Ende der <div>. Mehr interessante, wenn Sie geben Sie text ein, während der cursor ist "am Ende" die Platzierung des Textes ist in Ordnung... Dann, wenn Sie löschen Sie den neu eingegebenen text, der cursor springt zurück!

Vorbereitet habe ich ein Turnschuh, dass dieses. Ich brauche, dies funktioniert nur in Chrome, und andere Browser sind entweder nicht-Sorge für jetzt oder Problemumgehungen vorhanden. (Beachten Sie auch die vorbereitete Geige gefertigt ist, um dies zu demonstrieren, in Chrom nur).

Geige


Fiddle Unterricht: Chrome Version 39.0.2171.95 m (64-bit) reproduziert in 32-bit-als auch

  1. Klicken Sie in <div> Bereich
  2. Typ "123"
  3. Backspace "3" Backspace "- 2" Backspace "- 1"
    Warum Ist Mein Contenteditable Cursor Springt an das Ende in Chrome?

Einzelheiten In Bezug Auf Die

Erforschung dieses ausgiebig, ich bin gekommen, über verschiedene Frage ALSO, die ähnlich sind, aber in Anlehnung an den zugehörigen Lösungen hat sich nicht die silberne Kugel, die ich bin nach. Auch habe ich die Fragen für das Chrome-Projekt, die scheinen Ziel (vielleicht nicht in der genauen Art und Weise) das oben beschriebene Problem und kann eingesehen werden unter.

  1. Problem 384357: Cursor-position innerhalb contenteditable region mit Knoten nicht bearbeitbar,
  2. Problem 385003: Legen Sie die caret-Stil ist falsch, wenn du das Ende einer Zeile in einer contenteditable-element
  3. Problem 71598: Cursor in der falschen Stellung nach nicht-editierbare element am Ende der contentEditable

Den nächsten, SO dass die Lösung, die ich gefunden habe werden können hier. Die Idee bei dieser Lösung ist, um &zwnj; Zeichen nach der <span> Elemente, aber wenn ich jetzt löschen, meine <span> ich stattdessen löschen Sie die &zwnj;... zwingt mein cursor springt an das Ende, bietet eine seltsame UI-Erfahrung, indem Sie nicht löschen meine <span> auf meine "erste entf-Taste Schlaganfall."

Frage

Hat jemand Erfahrung mit diesem Problem und fand eine Arbeit um? Ich begrüße jede mögliche Lösung, sogar als JS hacky, wie Sie kommen. Ich bin gekommen, um zu erfahren, dass die Nutzung contenteditable kommt mit einer Wäscherei Liste der Kampf, aber das scheint das Letzte Verbleibende Schwierigkeit, die ich derzeit haben.

  • Welche version von Chrome benutzen Sie? Ich bin mit Chrome 39 und kann nicht reproduzieren Sie das Problem. Wenn ich löschen Sie die nicht-contenteditable spans, die Cursor-position bleibt die gleiche.
  • Ich habe einige detaillierte fiddle Unterricht mit meiner Chrome version. Das Problem ist für folgenden text die <span>. Bitte lassen Sie mich wissen, wenn diese Angaben helfen
  • Chrome 39.0.2171.95 (Linux 64-bit) - nicht sehen können, einen solchen glitch
  • sind Sie in der Lage, führen Sie das Beispiel auf einem Windows-Rechner?
  • Sorry, ich habe kein Windows.
  • Nach folgenden neuen Beispiel, kann ich es auch sehen. Wenn Sie das Kontrollkästchen Entwicklertools, es hält auch das hinzufügen "" anstelle von "schreiben in der gleichen Zeichenfolge", es sieht aus wie es eine neue erstellt jedes mal, wenn der Benutzer schreibt. Es ist komisch.
  • Richtig!!!! Es ist komisch, auch, wenn Sie sich bewegen, mit nach Links und rechts und halten Sie Konto, wo Sie sein "sollte", und geben Sie.. es ist in der richtigen Stelle, aber cursor scheint die "Verzögerung eine Bewegung, die hinter" in diesem Fall. Ich habe auf einer hacky workaround werde ich später, falls Sie sind interessiert zu sehen, eine mögliche Lösung für dieses
  • Sind Sie versuchen, neu zu erstellen, den Effekt, dass Twitter hat sich beim @ jemand in den tweet?
  • Etwas sehr ähnliches. Ich habe die Lösung, wie ich wünschte, mit Ausnahme für dieses kleine Problem in Chrome. Haben Sie eine ähnliche Arbeit?
  • Ja, ich habe versucht, es neu zu erstellen mich und fand eine Menge von Ungereimtheiten. Nichts wie deiner obwohl. Hatten Sie einen Lesevorgang durch diese: github.com/guardian/scribe/blob/master/... ? Vielleicht könnte Ihnen das helfen.
  • Immer noch keine Antwort, nur ein Interessantes Verhalten. Wenn Sie hinzufügen ein pseudo-element, um die Spannweiten, die mit einem Leerzeichen als Inhalt es ist, sehen Sie, dass die Letzte Spanne nicht vergeben werden, bis es gibt einige Charaktere vor. jsfiddle.net/41mo9xxd/11 vielleicht nicht sinnvoll.. einfach nur interessant?

InformationsquelleAutor scniro | 2015-01-05
Schreibe einen Kommentar