Ver Mensaje Individual
  #4 (permalink)  
Antiguo 08/03/2006, 11:50
Davhira
 
Fecha de Ingreso: mayo-2005
Mensajes: 63
Antigüedad: 19 años
Puntos: 1
Muy buen Editor

Hola Caricatos esta padre el editor, la posicion del cursor la necesitaba porque estaba haciendo un edit mask con formato de $ y decimales y al quitarle el formato se me perdia el cursor o el numero insertado. De hecho tambien hice varias preguntas sobre el mask

les envio el codigo del edit-mask


<html><head>
<script language="JavaScript">
function getPosCaret(input)
{
//creamos 2 rangos, uno donde este el cursor actualmente
var range = document.selection.createRange();
var range2 = input.createTextRange();
range2.collapse(true);
//se establece la posicion del segundo cursor
range2.moveEnd('character', 0);
range2.setEndPoint('EndToStart', range);
//se saca la distancia donde esta el cursor
distancia=range2.text.length
//se enconvierte la posicion de derecha a izquierda
pos_final=parseFloat(input.value.length)- parseFloat(distancia)
range2.move('character', pos_final)
//coloca el cursor despues del punto
if (pos_final==0)
pos_final=3
return pos_final;
}


function juntos_miles_caret(txt_campo)
{

var rango=txt_campo.createTextRange();
var range = document.selection.createRange();
//si hay seleccion se pasara a la variable cuando_sele
cuando_sele=range.text
seleccion_final=range.text.length
posicion_ini=getPosCaret(txt_campo)
//si el value empieza con punto,guion o parentesis lo sustituye
if (txt_campo.value.charAt(0)=='.' || txt_campo.value.charAt(0)=='-'|| txt_campo.value.charAt(0)=='(')
txt_campo.value='$0.00'
txt_campo.value=format_currency(txt_campo.value);
rango.collapse(true);
valor=txt_campo.value.length-posicion_ini
//coloca el cursor en el siguiente decimal
if (valor>=txt_campo.value.length-2 && cuando_sele=='')
valor+=1
rango.move('character',valor)
rango.select();
//detecta que se presiono la tecla punto y la coloca detras
if (event.keyCode==190 || event.keyCode==110)
cursorPunto(txt_campo,1)

//parte para que permita seleccionar, solo entra si hay seleccion
if (cuando_sele!='')
{
//se saca la posicion donde se dejo de seleccionar
pos_final=getPosCaret(txt_campo)
pos_fin=valor+seleccion_final
pos_ini=txt_campo.value.length-pos_final
rango=txt_campo.createTextRange();
rango.collapse(true);
//se coloca las posiciones
rango.moveEnd('character', pos_fin);
rango.moveStart('character', pos_ini);
rango.select();
}
}
function cursorPunto(txt_campo, posicion)
{
//si no se le asigna posicion por default es antes del punto AQUI.00
(posicion==undefined)?posicion=0:null
rango=txt_campo.createTextRange();
longitud=txt_campo.value.length
valor=String(txt_campo.value)
//busca el primer punto mientras que el contador aumenta(posicion)
for (i=0;i<longitud;i++)
{
(valor.charAt(i)=='.')?i=longitud:posicion++;
}
rango.move('character',posicion)
rango.select();
}

function format_currency(cant)
{
cant=unformat_currency(cant)
var temp, temp1, temp2, strng, cifras, inic
if (cant<0)
{
inic='$-'
cant=cant*-1
}
else
{
inic='$'
}

strng=''
cifras=Math.round((cant-(Math.floor(cant)))*100)
cant=Math.floor(cant)

if (cifras<10)
{
cifras='0'+String(cifras)
}

while (cant>=1000)
{
temp=cant/1000
temp1=Math.floor(temp)
temp2=temp-temp1
cant=Math.floor(cant/1000)
temp2=Math.round(temp2*1000)
if (temp2<10)
{
temp2='0'+'0'+String(temp2)
}
else
{
if (temp2<100)
{
temp2='0'+String(temp2)
}
else
{
temp2=String(temp2)
}
}
strng=','+temp2+strng
}
strng=inic+cant+strng+'.'+cifras
return strng;
}

function unformat_currency(strng)
{
validos="0123456789-(.";
var strng_new='';
punto=false;
for (var s=0; s<strng.length; s++)
{
if (!(validos.indexOf(strng.charAt(s))==-1))
{
// lo siguiente es necesario porque hay algunos sistemas operativos que ponen parentesis para las cantidades negativas
if (strng.charAt(s)=='(')
{
strng_new=strng_new+'-'
}
else if ( (strng.charAt(s)!='.') || ((strng.charAt(s)=='.') && !punto) )
{
strng_new=strng_new+String(strng.charAt(s))
}
(strng.charAt(s)=='.')?punto=true:null;
}
}
return strng_new;
}

function textboxSelect(oTextbox)
{
var oRange = oTextbox.createTextRange();
oRange.moveStart("character", 0);
oRange.moveEnd("character", oTextbox.value.length-1);
oRange.select();
}

</script>
</head>
<body>
<form name="formulario">
Precio:<input name="enteros" type="text" onkeyup="juntos_miles_caret(this)" onBlur="this.value=format_currency(this.value);" size="15" maxlength="15" onfocus="bag=false;textboxSelect(this)" style="text-align:'right'" value="$123.55" onkeypress="(event.keyCode==8)?this.fireEvent('onk eyup'):null;(event.keyCode==35)?keycode=0:null;">
</form>
</body>
</html>