El enfoque que utilice, por supuesto, depende de cuál sea su objetivo final. Si desea enviar los resultados con un formulario, usar elementos de formulario nativos significa que no tiene que usar secuencias de comandos para enviar. Además, si la secuencia de comandos está desactivada, la reserva seguirá funcionando sin los elegantes efectos de reducción de tamaño. Si desea obtener el texto sin formato de un elemento satisfactorio , siempre puede usar secuencias de comandos como node.textContent para eliminar el html que los navegadores insertan en la entrada del usuario.
Esta versión utiliza elementos de formulario nativo con ligeras mejoras en algunas de las publicaciones anteriores.
También permite que el contenido se reduzca.
Use esto en combinación con CSS para un mejor control.
<html>
<textarea></textarea>
<br>
<input type="text">
<style>
textarea {
width: 300px;
min-height: 100px;
}
input {
min-width: 300px;
}
<script>
document.querySelectorAll('input[type="text"]').forEach(function(node) {
var minWidth = parseInt(getComputedStyle(node).minWidth) || node.clientWidth;
node.style.overflowX = 'auto'; // 'hidden'
node.onchange = node.oninput = function() {
node.style.width = minWidth + 'px';
node.style.width = node.scrollWidth + 'px';
};
});
Puedes usar algo similar con los elementos <textarea>
document.querySelectorAll('textarea').forEach(function(node) {
var minHeight = parseInt(getComputedStyle(node).minHeight) || node.clientHeight;
node.style.overflowY = 'auto';
node.onchange = node.oninput = function() {
node.style.height = minHeight + 'px';
node.style.height = node.scrollHeight + 'px';
};
});
Esto no parpadea en Chrome, los resultados pueden variar en otros navegadores, así que prueba.