Lástima que no conozco el funcionamiento de la validación HTML5, pero no creo que sea difícil incluir un
div. Seguramente en lugar de leer el
value tendrá que ver el
innerHTML (como quiera que se llamen en ese lenguaje).
Para que
indente siempre, y no sólo cuando pierde el foco, se pueden usar los eventos
onmouseover y
onmouseout. Y para controlar mejor el "ancho" del espacio libre, se podría usar el caracter de "espacio de un em", que tiene justamente el ancho de
1em. Aunque no sé si estará en todas las fuentes...
Código:
<script type="text/javascript">
function indenta(T){
if (navigator.userAgent.indexOf("Opera")!=-1){
var alfa = T.value;
var ind = /\u2003\u2003/g; // dec 8195
//var salto = /\r\n/g;
alfa = alfa.replace(ind, "")//.replace(salto, "\r\n\u2003\u2003");
alfa = "\u2003\u2003" + alfa;
T.value = alfa;
}
}
</script>
Por supuesto que en los demás navegadores se usa CSS. Esto es un invento puesto acá como una ayuda, porque nadie va a buscar la solución de éste asunto en el foro de JS.
El detalle, por el que claramente es mejor el ejemplo de
emprear, aparece al tener que borrar esos caracteres de más al enviar el valor, o al recibirlos en el server. Porque no serían parte del mensaje que te están enviando.