Mon application inclut une fonction de saisie lorsqu'un utilisateur saisit une zone de commentaire. De la même manière que Facebook et google +, il effectuera une recherche d'utilisateurs et les proposera comme tags à la volée.Comment éviter le mauvais positionnement du curseur lors de la suppression d'éléments dans un div modifiable
Lorsqu'un utilisateur sélectionne l'une des étiquettes proposées, il est entré dans la zone de saisie en tant qu'élément.
J'ai décidé d'utiliser un div compatible pour cela, mais j'ai rencontré quelques problèmes.
Il s'avère que firefox ne supprime pas les éléments insérés lorsqu'ils sont définis sur contentedable false alors que tous les autres navigateurs principaux le font. Pour contourner ce problème, j'ai défini les balises 'user' insérées comme contenteditble = true et j'ai écrit une solution de contournement jquery rapide pour résoudre ce problème.
Cela fonctionne parfaitement indépendamment d'un problème majeur. S'il y a plusieurs étiquettes dans la zone et que le premier n'est pas suivi de texte, alors l'utilisateur supprime le dernier (en supposant la suppression avec la touche retour arrière de droite à gauche) le curseur se positionne incorrectement après cette suppression finale.
La saisie à nouveau semble alors ramener la position à la normale.
Ce problème se produit uniquement dans Firefox
Voici un jsFiddle montrant la question:
http://jsfiddle.net/gordyr/PESky/
Placez votre curseur à la fin de cette dernière balise, puis maintenez enfoncée la touche backspace jusqu'à ce que tous les éléments soient supprimés. Vous verrez que le curseur/curseur se déplace vers le haut et hors de position.
Il est tout à fait possible que ce soit un bogue dans firefox lui-même, mais je cherche une solution de contournement quelconque car sans cette suppression automatique d'éléments avec javascript, ils ne sont pas supprimés du tout.
Un grand merci
Absolument parfait! J'avais joué avec des idées similaires, mais je n'avais pas encore réussi à utiliser le trim pour une raison stupide. Cela fonctionne parfaitement, merci. Ce code est un polyfill pour firefox car tous les autres navigateurs semblent se comporter correctement ... Peu importe que je sois sous l'impression que keypress était considéré comme la meilleure pratique et je ne savais pas que jQuery normalise e.which ... Great info. Merci pour votre aide, je vais accepter la réponse dès que possible. – gordyr
IMO contenteditable est génial, mais comme il prend en charge le "texte riche", il peut également être rempli avec beaucoup de choses sales par l'entrée de l'utilisateur. – David
En effet, il semble certainement de cette façon ...bon apprentissage pour moi. acclame David. – gordyr