Tengo un contenteditable
elemento, y cada vez que escribo algo y ENTER
lo presiono crea uno nuevo <div>
y coloca el nuevo texto de línea allí. No me gusta este poquito.
¿Es posible evitar que esto suceda o al menos simplemente reemplazarlo con un <br>
?
Aquí está la demostración http://jsfiddle.net/jDvau/
Nota: Esto no es un problema en Firefox.
Respuestas:
Prueba esto:
Haga clic aquí para ver una demostración
fuente
Puede hacer esto con solo un cambio de CSS:
http://jsfiddle.net/ayiem999/HW43Q/
fuente
Agregue estilo
display:inline-block;
acontenteditable
, no se generarádiv
,p
yspan
automáticamente en Chrome.fuente
*[contenteditable="true"]{display: inline-block;}
<p></p>
:(Prueba esto:
http://jsfiddle.net/rooseve/jDvau/3/
fuente
input
no se active cuando presionas enter. Una solución simple: agregue algo como$(this).trigger('input')
insertHTML
solución hace algunas cosas raras cuando haycontenteditable
elementos anidados , su solución evita eso pero hay algunos problemas más, lo agregué como una nueva solución posible.Se anula el comportamiento predeterminado para tener párrafo en su lugar.
En Chrome, el comportamiento predeterminado al ingresar es:
Con ese comando va a ser
Ahora que es más lineal, es fácil tenerlo solo
<br>
si lo necesita.fuente
Use shift+ en enterlugar de entersimplemente colocar una sola
<br>
etiqueta o envolver su texto en<p>
etiquetas.fuente
La forma en que se
contenteditable
comporta cuando presiona enterdepende de los navegadores, lo que<div>
sucede en webkit (Chrome, Safari) e IE.Luché con esto hace unos meses y lo corregí de esta manera:
Espero que ayude, y lo siento por mi inglés si no es tan claro como sea necesario
EDITAR : corrección de la función jQuery eliminada
jQuery.browser
fuente
jQuery.browser
ya no es parte de jQuery.navigator.userAgent.indexOf("msie") > 0
ynavigator.userAgent.indexOf("webkit") > 0
if( ( e.keyCode || e.witch ) == 13 ) { ... }
necesita serif (e.keyCode === 13 || e.which === 13) { ... }
Puede tener
<p>
etiquetas separadas para cada línea en lugar de usar<br>
etiquetas y obtener una mayor compatibilidad del navegador fuera de la caja.Para hacer esto, pon un
<p>
etiqueta con texto predeterminado dentro del div contenteditable.Por ejemplo, en lugar de:
Utilizar:
jsfiddle
Probado en Chrome, Firefox y Edge, y el segundo funciona igual en cada uno.
Sin embargo, el primero crea divs en Chrome, crea saltos de línea en Firefox, y en Edge crea divs y el cursor se vuelve a colocar al comienzo del div actual en lugar de pasar al siguiente.
Probado en Chrome, Firefox y Edge.
fuente
Me gusta usar Mousetrap para manejar teclas de acceso rápido: https://craig.is/killing/mice
Luego, solo intercepto el evento enter, ejecutando un comando insertLineBreak :
Funciona usando Chrome 75 y el siguiente elemento editable:
También es posible usar insertHTML :
fuente
agregar un valor predeterminado de prevención al div
fuente
document.body.div
(es probable que deba poner algún otro código para corregirdiv
la idea general)Usaría el estilo (Css) para solucionar el problema.
Firefox agrega un salto de elemento de bloque
, mientras que Chrome envuelve cada sección en una etiqueta. Tu css le da a los divs un relleno de 10px junto con el color de fondo.
Alternativamente, puede replicar el mismo efecto deseado en jQuery:
Aquí hay un tenedor de su violín http://jsfiddle.net/R4Jdz/7/
fuente
contenteditable
y loPuede ajustar sus párrafos con una
<p>
etiqueta, por ejemplo, aparecería en una nueva línea en lugar de div Ejemplo:<div contenteditable="true"><p>Line</p></div>
después de insertar una nueva cadena:
<div contenteditable="true"><p>Line</p><p>New Line</p></div>
fuente
La
inserHTML
solución de comando hace algunas cosas raras cuando has anidadocontenteditable
elementos .Tomé algunas ideas de varias respuestas aquí, y esto parece satisfacer mis necesidades por ahora:
fuente
Intenta usar ckeditor. También proporciona formato como este en SOF.
https://github.com/galetahub/ckeditor
fuente
Primero, necesitamos capturar cada clave que ingrese el usuario para ver si se presiona enter, luego evitamos la
<div>
creación y creamos la nuestra.<br>
etiqueta.Hay un problema, cuando lo creamos, nuestro cursor permanece en la misma posición, por lo que usamos la API de selección para colocar nuestro cursor al final.
No olvide agregar una
<br>
etiqueta al final de su texto porque si no lo hace, la primera entrada no hará una nueva línea.Violín
fuente
Este es el editor HTML5 dirigido por el navegador. Puede ajustar su texto
<p>...</p>
, luego cada vez que presiona ENTRAR obtiene<p></p>
. Además, el editor funciona de esta manera que cada vez que presiona MAYÚS + ENTRAR se inserta<br />
.Verifique esto: http://jsfiddle.net/ZQztJ/
fuente
Esto funciona en todos los principales navegadores (Chrome, Firefox, Safari, Edge)
Hay un inconveniente. Después de que termine de editar, los elementos pueden contener un final
<br>
dentro. Pero podría agregar código para recortarlo si es necesario.Verifique esta respuesta para eliminar el https://stackoverflow.com/a/61237737/670839 final
<br>
fuente
¿Dónde
this
está el contexto real que significadocument.getElementById('test');
?fuente
Otra forma de hacerlo
http://jsfiddle.net/jDvau/11/
fuente
Evite la creación de nuevas Div en contenido Div editable en cada tecla enter: La solución que he encontrado es muy simple:
Este contenido --- innerHTML impide la creación de Nueva Div en contenido Div editable en cada tecla enter.
fuente
En el Borrador del Editor del W3C hay información sobre cómo agregar estados en ContentEditable , y para evitar que el navegador agregue un nuevo elemento al presionar enter que puede usar
plaintext-only
.fuente
Es posible prevenir este comportamiento por completo.
Ver este violín
fuente