Ver Mensaje Individual
  #6 (permalink)  
Antiguo 15/10/2011, 08:24
furoya
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años, 1 mes
Puntos: 317
Respuesta: Alinear números decimales .

Vuelvo acá porque estuve mirando el HTML 5 y sus variantes de input.
Resulta que type=number es para hacer un spin, pero no agrega mucho para los formatos de números en formularios, y éste asunto del encolumnado del punto decimal —como verán— ya es muy viejo para que no lo hayan solucionado de alguna forma.

Me puse a actualizar el código para los editables, pero no me tomé tanto trabajo como en el anterior, no cubre tantas posibilidades. Habría que esperar a que los desarrolladores de navegadores lo implementen por las suyas.
Igual, les dejo lo que tengo hecho hasta que me cansé y pisé la tierra : viendo los calendarios, paletas de colores, slidebars y hasta el espín que mencioné más arriba, que resolvieron tan fácil mientras nosotros nos matábamos para conseguirlos con JS, CSS y HTML, ni en broma me voy a poner a mejorarlo. (¡Y encima que éste no anda en Chrome!)

Código HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<title>AJUSTA DECIMALES.</title>
<script type="text/javascript">

var anchoNum, columna, totInputs, totDecNum1, cadaInput;
var maxDec = 0;
var vuelta = 0;

function inicia() {
anchoNum = document.getElementById("muestra").offsetWidth / 2;
ajusta();
}


function ajusta(){

columna = document.getElementById("lista0");

totInputs = columna.getElementsByTagName("input").length;

for (i=0; i<totInputs; i++) {
var vInput = columna.getElementsByTagName("input")[i].value;

if(vInput.indexOf(".") == -1) {vInput = vInput + ".";}

columna.getElementsByTagName("input")[i].value = vInput;

var cortaNum = vInput.split(".");
var totDecNum0 = (cortaNum != "") ? cortaNum[1].length : 0;

maxDec = (maxDec < totDecNum0) ? totDecNum0 : maxDec;


cadaInput = columna.getElementsByTagName("input")[i];

if(cadaInput.value != ".") {
totDecNum1 = cadaInput.value.split(".")[1].length;

//alert("maxDec "+maxDec+"; "+totDecNum1+" decim en input "+i)

var espaciado = (maxDec - totDecNum1) * anchoNum;

//alert("maxDec "+maxDec+" - cant decimales "+totDecNum1+" * "+ anchoNum +"="+ espaciado +"px de padding en input" +i)

cadaInput.style.paddingRight = espaciado +"px";
cadaInput.style.width = 140 - espaciado +"px";
cadaInput.value = cadaInput.value;
}

else {
cadaInput.value = "";
//alert(i+" vacio");
}

}
/* LAS SIGUIENTES LINEAS SON PARA QUE EL ESCRIPT DE "2 VUELTAS" */
if(vuelta == 0){
vuelta = 1;
setTimeout(ajusta, 10);
}
else{
vuelta = 0;
maxDec = 0;
}

}

onload = inicia;
</script>
<style type="text/css">
#lista0 { border: red 2px solid; width: 144px; }

.punto { height: 18px; width: 140px; text-align: right; 
font: 14px/14px arial, helvetica, sans-serif; 
overflow: hidden; }

#muestra { font: 14px/14px arial, helvetica, sans-serif; 
position: absolute; left: 0; top: -50px; }

.punto:focus { background-color: lime; }
</style>
</head>
<body>

<div id=lista0>

<span id=muestra>00</span>
<input type=text maxlength=9 class=punto onchange=ajusta()><br>
<input type=text maxlength=9 class=punto onchange=ajusta()><br>
<input type=text maxlength=9 class=punto onchange=ajusta()><br>
<input type=text maxlength=9 class=punto onchange=ajusta()><br>
<input type=text maxlength=9 class=punto onchange=ajusta()><br>
<input type=text maxlength=9 class=punto onchange=ajusta()><br>

</div>

</body>
</html> 

Cómo se llama este componente?

slidebar / trackbar en html

Cambio de tamaño del colorwheel

Fechas (externo)

Fechas y horas (manejo de tiempo) (externo)