Erkennt ein Einfügeereignis in einem contenteditable

Lesezeit: 2 Minuten

Benutzer-Avatar
Rachela Wiesen

mit einem Inhalt bearbeitbaren div. Wie kann ich ein Einfügeereignis erkennen, verhindern, dass die Einfügung eingefügt wird, damit ich die Einfügung abfangen und bereinigen kann, damit sie nur Text enthält?

Ich möchte auch nicht den Fokus verlieren, nachdem das Einfügen + Desinfizieren abgeschlossen ist.

  • Was hilfreich wäre, wäre ein Fonds, der das Einfügeereignis erfasst, bevor es auftritt, bereinigt und dann den sicheren Inhalt in den bearbeitbaren Inhalt einfügt, ohne die Cursorposition zu verlieren. Ideen?

    – Rachela Meadows

    19. November 2011 um 0:29 Uhr

  • IE, Safari und Chrome ermöglichen den Zugriff auf die Daten in der Zwischenablage, aber Sie müssen sich eine große Problemumgehung für Firefox einfallen lassen. Viel einfacher, wenn es möglich ist, wäre es, nur die Paste zuzulassen und dann den Inhalt des gesamten Elements nachträglich zu bereinigen. Funktioniert das?

    – sdleihssirhc

    19. November 2011 um 0:42 Uhr

  • Es gibt eine hackige Methode, die ich zuvor gepostet habe: stackoverflow.com/questions/2176861/…, stackoverflow.com/questions/4365833/…

    – Tim unten

    19. November 2011 um 15:20 Uhr

Benutzer-Avatar
dkro

AKTUALISIEREN:

Alle gängigen Browser geben Ihnen jetzt Zugriff auf die Zwischenablagedaten in einem Einfügeereignis. Sehen Sie sich die Antwort von Nico Burns als Beispiel für einen neueren Browser an und sehen Sie sich auch die Antwort von Tim Down an, wenn Sie ältere Browser unterstützen müssen.


Sie können auf die hören aufEinfügen Ereignis auf dem div, um die Paste zu erkennen. Wenn Sie nur das Einfügen deaktivieren möchten, können Sie anrufen event.preventDefault() von diesem Zuhörer.

Das Erfassen des eingefügten Inhalts ist jedoch etwas schwieriger, da dies der Fall ist onPaste Das Ereignis gibt Ihnen keinen Zugriff auf den eingefügten Inhalt. Der übliche Weg, dies zu handhaben, besteht darin, Folgendes aus dem zu tun onPaste Ereignishandler:

  • Erstellen Sie ein Dummy-Div und platzieren Sie es außerhalb der Fenstergrenzen, sodass es für Besucher nicht sichtbar ist
  • Bewegen Sie den Fokus auf dieses div
  • Rufen Sie eine Desinfektionsmethode mit a auf setTimeout(sanitize, 0)

und von Ihrer Desinfektionsmethode:

  • Finden Sie das Dummy-Div und erhalten Sie seinen Inhalt
  • bereinigen Sie den HTML-Code und entfernen Sie das div
  • Bewegen Sie den Fokus zurück auf das ursprüngliche div
  • fügen Sie den bereinigten Inhalt in das ursprüngliche div ein

  • Das paste event ist in einigen Browsern zu spät, um diese Art der Weiterleitung durchzuführen, aber die allgemeine Idee funktioniert.

    – Tim unten

    19. November 2011 um 15:21 Uhr

  • Hier ist eine weitere sehr beliebte Lösung, die browserübergreifend getestet wurde stackoverflow.com/questions/2176861/…

    – yosyosh

    3. Oktober 2013 um 21:58 Uhr

1101820cookie-checkErkennt ein Einfügeereignis in einem contenteditable

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy