J'ai un contenteditable
élément, et chaque fois que je tape des trucs et frappe, ENTER
cela crée un nouveau<div>
texte et y place le nouveau texte de ligne. Je n'aime pas ça du tout.
Est-il possible d'empêcher cela ou du moins de le remplacer par un <br>
?
Voici la démo http://jsfiddle.net/jDvau/
Remarque: ce n'est pas un problème dans Firefox.
Réponses:
Essaye ça:
Cliquez ici pour une démo
la source
Vous pouvez le faire avec juste un changement CSS:
http://jsfiddle.net/ayiem999/HW43Q/
la source
Ajoutez du style
display:inline-block;
àcontenteditable
, il ne sera pas générédiv
,p
etspan
automatiquement dans Chrome.la source
*[contenteditable="true"]{display: inline-block;}
<p></p>
:(Essaye ça:
http://jsfiddle.net/rooseve/jDvau/3/
la source
input
éviter que le ne se déclenche lorsque vous appuyez sur Entrée. Une solution simple: ajouter qc comme$(this).trigger('input')
insertHTML
solution fait des choses étranges quand il y a descontenteditable
éléments imbriqués , votre solution contourne cela mais il y a d'autres problèmes, je l'ai ajouté comme nouvelle solution possible.Il remplace le comportement par défaut pour avoir un paragraphe à la place.
Sur Chrome, le comportement par défaut lors de l'entrée est:
Avec cette commande, ça va être
Maintenant qu'il est plus linéaire à travers, il est facile de l'avoir seulement
<br>
si vous en avez besoin.la source
Utilisez shift+ enterau lieu de enterpour insérer une seule
<br>
balise ou envelopper votre texte de<p>
balises.la source
La façon dont
contenteditable
se comporte lorsque vous appuyez entersur dépend des navigateurs,<div>
cela se produit sur Webkit (chrome, safari) et IE.J'ai eu du mal avec cela il y a quelques mois et je l'ai corrigé de cette façon:
J'espère que cela aidera et désolé pour mon anglais s'il n'est pas aussi clair que nécessaire.
EDIT : Correction de la fonction jQuery supprimée
jQuery.browser
la source
jQuery.browser
ne fait plus partie de jQuery.navigator.userAgent.indexOf("msie") > 0
etnavigator.userAgent.indexOf("webkit") > 0
if( ( e.keyCode || e.witch ) == 13 ) { ... }
doit êtreif (e.keyCode === 13 || e.which === 13) { ... }
Vous pouvez avoir des
<p>
balises distinctes pour chaque ligne plutôt que d'utiliser des<br>
balises et obtenir une meilleure compatibilité avec le navigateur dès le départ.Pour ce faire, placez une
<p>
balise avec du texte par défaut à l'intérieur de la div contenteditable.Par exemple, au lieu de:
Utilisation:
jsfiddle
Testé dans Chrome, Firefox et Edge, et le second fonctionne de la même manière dans chacun.
Le premier, cependant, crée des divs dans Chrome, crée des sauts de ligne dans Firefox, et dans Edge crée des divs et le curseur est remis au début du div actuel au lieu de passer au suivant.
Testé dans Chrome, Firefox et Edge.
la source
J'aime utiliser Mousetrap pour gérer les raccourcis clavier: https://craig.is/killing/mice
Ensuite, je viens d'intercepter l'événement enter, en exécutant une commande insertLineBreak :
Il fonctionne avec Chrome 75 et l'élément modifiable suivant:
Il est également possible d'utiliser insertHTML :
la source
ajouter une valeur par défaut au div
la source
document.body.div
(vous aurez probablement besoin de mettre un autre code pour pointer pour corriger c'estdiv
juste l'idée générale)J'utiliserais le style (Css) pour résoudre le problème.
Firefox ajoute en effet une rupture d'élément de bloc
, alors que Chrome enveloppe chaque section dans une balise. Votre css donne aux div un remplissage de 10px avec la couleur d'arrière-plan.
Vous pouvez également répliquer le même effet souhaité dans jQuery:
Voici une fourchette de votre violon http://jsfiddle.net/R4Jdz/7/
la source
contenteditable
et l'utiliser ailleursVous pouvez envelopper vos paragraphes avec une
<p>
balise par exemple, elle apparaîtrait sur une nouvelle ligne au lieu de div Exemple:<div contenteditable="true"><p>Line</p></div>
Après avoir inséré une nouvelle chaîne:
<div contenteditable="true"><p>Line</p><p>New Line</p></div>
la source
La
inserHTML
solution de commande fait des choses étranges lorsque vous avez descontenteditable
éléments imbriqués .J'ai pris quelques idées de plusieurs réponses ici, et cela semble répondre à mes besoins pour le moment:
la source
Essayez d'utiliser ckeditor. Il fournit également un formatage comme celui-ci dans SOF.
https://github.com/galetahub/ckeditor
la source
Nous devons d'abord capturer chaque entrée d'utilisateur clé pour voir si Entrée est enfoncée, puis nous empêchons la
<div>
création et nous créons la nôtre<br>
balise.Il y a un problème, lorsque nous le créons, notre curseur reste à la même position, nous utilisons l' API de sélection pour placer notre curseur à la fin.
N'oubliez pas d'ajouter une
<br>
balise à la fin de votre texte car si vous ne le faites pas, la première entrée ne fera pas de nouvelle ligne.Violon
la source
Il s'agit d'un éditeur HTML5 dirigé par un navigateur. Vous pouvez envelopper votre texte avec
<p>...</p>
, puis chaque fois que vous appuyez sur ENTRÉE, vous obtenez<p></p>
. En outre, l'éditeur fonctionne de cette façon que chaque fois que vous appuyez sur MAJ + ENTRÉE, il insère<br />
.Vérifiez ceci: http://jsfiddle.net/ZQztJ/
la source
Cela fonctionne dans tous les principaux navigateurs (Chrome, Firefox, Safari, Edge)
Il y a un inconvénient. Une fois l'édition terminée, les éléments peuvent contenir une fin à l'
<br>
intérieur. Mais vous pouvez ajouter du code pour réduire cela si vous en avez besoin.Cochez cette réponse pour supprimer le https://stackoverflow.com/a/61237737/670839 de fin
<br>
la source
Où
this
est le contexte réel qui signifiedocument.getElementById('test');
.la source
Une autre façon de le faire
http://jsfiddle.net/jDvau/11/
la source
Empêcher la création de nouvelles Div dans le contenu éditable Div sur chaque touche d'entrée: La solution que j'ai trouvée est très simple:
Ce contenu --- innerHTML empêche la création d'une nouvelle division dans un contenu div modifiable à chaque touche d'entrée.
la source
Le brouillon de l'éditeur W3C contient des informations sur l'ajout d'états dans ContentEditable et vous pouvez utiliser pour empêcher le navigateur d'ajouter un nouvel élément lorsque vous appuyez sur Entrée
plaintext-only
.la source
Il est possible d'empêcher complètement ce comportement.
Voir ce violon
la source