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.
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
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