Vigueur IE contentEditable élément pour créer des sauts de ligne sur la touche Enter, sans casser Annuler
Sur Internet Explorer, une contentEditable DIV crée un nouveau paragraphe (<p></p>
) chaque fois que vous appuyez sur Entrée alors que Firefox crée un <br/>
tag.
Comme discuté ici, il est possible d'utiliser JavaScript pour intercepter l'Entrée de pression de touches et l'utilisation de la gamme.pasteHTML pour créer un <br/>
à la place. Mais cela rompt le menu Annuler; une fois que vous appuyez sur Entrée, vous ne pouvez plus Annuler-delà de ce point.
Comment puis-je forcer le contentEditable élément pour créer des sauts de ligne uniques sur Entrer sans casser l'Annuler?
- Bon point - et même la disposition des Éditeurs WYSIWYG peut vous aider avec ceci, qu'ils mettent en œuvre leurs propres systèmes d'annuler.
Vous devez vous connecter pour publier un commentaire.
Pas une solution exacte, mais une autre solution. Si vous utilisez le balisage:
Puis en appuyant sur entrée permettra de créer de nouveaux
div
tags lieu dep
balises.<p>
pauses.contenteditable
a été un propriétaire de Microsoft attribut qu'ils ont mis en œuvre quelle que soit la façon dont ils voulaient, certains de ce qui est logique, mais la plupart de qui a beaucoup trop de bugs. Les FF de la mise en œuvre est moins buggé mais n'certaines des choses non standards (entrée devrait vraiment créer de nouveaux paragraphes). Ici en espérant que IE9 revient sur cette fonctionnalité. Pour atteindre un semblant de cohérence entre eux, vous devez vraiment envisager de javascript.Maintenez la touche maj enfoncée lorsque vous appuyez sur entrée pour les pauses, ne pas la maintenir enfoncée pour des paragraphes entiers. Ce comportement est le même par défaut dans Firefox, compte tenu d'une contenteditable zone contenant un paragraphe: c'est à dire
Je suppose que vous allez poster le contenu modifiable retour à un serveur. Par conséquent, vous ne devriez pas vraiment se préoccuper de savoir si vous avez paragraphe ou les balises de saut en place pendant que l'utilisateur est l'édition, parce que vous pouvez analyser le code HTML avant la soumission (ou sur le serveur, si vous le souhaitez) et de remplacer les occurrences de paragraphes avec des pauses. Cela permet de maintenir l'ANNULATION de la file d'attente de l'utilisateur, mais vous permet d'avoir votre code HTML aussi propre que vous le voulez.
Je vais encore présumer que vous allez savoir exactement quels éléments DIV vont être contentEditable. Avant l'envoi du formulaire, vous pouvez exécuter chaque contentEditable div grâce à une fonction comme ceci:
Et vous appelez cela dans une boucle qui itère sur tous les contentEditable DIVs, à l'aide d'un tableau je vais appeler ceDivs), comme ceci:
et puis:
Une amélioration sur ce (surtout si vous ne voulez pas faire de ce droit, au moment de l'envoi), peut-être de nettoyer le contenu de chacune de ces div tout autre moment que vous le souhaitez (onblur, peu importe) et affecter le contenu de chaque ceDiv à ses propres invisible élément de formulaire pour la présentation ultérieure. Utilisé en combinaison avec votre propre feuille de style CSS suggestion ci-dessus, cela pourrait fonctionner pour vous. Il ne conserve pas vos littérale exigences à la lettre (c'est à dire, qu'il ne soit pas le langage Javascript pour IE se comportent différemment de ce qu'il a été codé sous les couvertures pour se comporter), mais à toutes fins pratiques, l'effet est le même. Les utilisateurs obtiennent ce qu'ils veulent et vous obtenez ce que vous voulez.
Pendant que vous y êtes, vous pouvez également nettoyer l'espace des chaînes dans IE ainsi. Si l'utilisateur types d'espaces multiples (comme certains continuent de le faire après des périodes), ce qui est inséré par IE n'est pas [espace][espace] mais [espace] , un premier espace de caractères (String.fromCharCode(32) plus que de nombreux entités qu'il y a à gauche dans l'espace exécuter.
Utilisation
<BR>
au lieu de<P>
(Testé dans IE9. Peut-êtrenbsp;
est nécessaire dans les anciennes versions après<BR>
(pasteHTML("<br> "))
)L'utiliser sur de l'événement keydown:
Il peut être impossible d'obtenir ce droit. Toutefois, il est possible de faire la
<p>
tags look comme un seul des sauts de ligne, en retrait de la marge intégrée autour des étiquettes de paragraphe, à l'aide de CSS:Il y a un inconvénient de cette approche: si l'utilisateur a besoin de copier/coller le texte dans la contentEditable élément, le texte peut sembler être à simple interligne à l'intérieur de l'élément, mais à double interligne à l'extérieur de l'élément.
Pire, dans certains cas au moins, IE va automatiquement détecter les doubles-sauts de ligne lors de la pâte, en les remplaçant par
<p>
balises; cela embrouillerait la mise en forme du texte collé.IE lie le nœud de texte avec un
<p>
balise Entrée appuyez sur une touche. Pour réaliser un saut de ligne Maj+Entrée. Firefox ajoute un<br>
balise Entrée appuyez sur une touche. Pour que le comportement commun à travers les deux navigateurs, vous pouvez effectuer les opérations suivantes:Assumer le balisage suivant:
Javascript [assumer le code ci-dessous est une fonction de fermeture afin de ne pas gonfler la page avec globals]:
Remarque: ce script est avant jQuery < 1,9 pour l'utilisation de l'obsolète
$.browser
Envisager d'utiliser
<span contenteditable="true"></span>
lors de l'utilisation d'Internet Explorer. Vous ne voulez pas le faire avec Chrome car l'accent est drôle. Vous aurez probablement envie de mettre en place votre propreonfocus
etonblur
code.