Ver Mensaje Individual
  #6 (permalink)  
Antiguo 17/10/2006, 14:45
Avatar de Developer9
Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años, 11 meses
Puntos: 47
Hola amigo... la cosa es que en el keypress tengo una función para hace que solo se permita ingresar numeros y se formatee automáticamente a dos decimales. La cosa es cuando hago un CTRL + C en algún otro lado y luego un CTRL + V en el textbox en cuestión si se me pegan letras, y en el caso de que lo pegado sean numeros no se me formatea a dos decimales, también cuando hago un select en la base y asigno un valor de la base al textbox, de la base viene con cuatro decimales y no se formatea a dos, en estos casos mi función que está en el keypress y en el onchange no vale. Puse la misma función en el onchange y tampoco me vale

La función es grandota, no creo que la vayan a analizar toda. El llamado lo hago asi:

OnKeypress="javascript:return(currencyFormat(this, '','.',event,10,2));"
OnChange="javascript:return(currencyFormat(this,'' ,'.',event,10,2));"

y la funciOncilla es esta:

Código:
function currencyFormat(fld, milSep, decSep, e,limite,decimales) { 
if (fld.value.length>limite)
	return false;
    var sep = 0; 
    var key = ''; 
    var i = j = 0; 
    var len = len2 = 0; 
    var strCheck = '0123456789'; 
    var aux = aux2 = ''; 
    var whichCode = (window.Event) ? e.which : e.keyCode; 
    if (whichCode == 13) return false; // Enter 
    key = String.fromCharCode(whichCode); // Get key value from key code 
    if (strCheck.indexOf(key) == -1) return false; // Not a valid key 
    len = fld.value.length; 
    for(i = 0; i < len; i++) 
     if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break; 
    aux = ''; 
    for(; i < len; i++) 
     if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i); 
    aux += key; 
    len = aux.length; 
   if(decimales==2)
   {
    if (len == 0) fld.value = ''; 
    if (len == 1) fld.value = '0'+ decSep + '0' + aux; 
    if (len == 2) fld.value = '0'+ decSep + aux; 
    if (len > 2) 
	{ 
     aux2 = ''; 
     for (j = 0, i = len - 3; i >= 0; i--) { 
      if (j == 3) { 
       aux2 += milSep; 
       j = 0; 
      } 
      aux2 += aux.charAt(i); 
      j++; 
     } 
     fld.value = ''; 
     len2 = aux2.length; 
     for (i = len2 - 1; i >= 0; i--) 
      fld.value += aux2.charAt(i); 
     fld.value += decSep + aux.substr(len - 2, len); 
	 }
   } 
   else
   {
	if (len == 0) fld.value = ''; 
    if (len == 1) fld.value = '0'+ decSep + '000' + aux; 
	if (len == 2) fld.value = '0'+ decSep + '00' + aux; 
    if (len == 3) fld.value = '0'+ decSep + '0' + aux; 
	if (len == 4) fld.value = '0'+ decSep + aux; 
	
    if (len > 4) { 
     aux2 = ''; 
     for (j = 0, i = len - 5; i >= 0; i--) { 
      if (j == 3) { 
       aux2 += milSep; 
       j = 0; 
      } 
      aux2 += aux.charAt(i); 
      j++; 
     } 
     fld.value = ''; 
     len2 = aux2.length; 
     for (i = len2 - 1; i >= 0; i--) 
      fld.value += aux2.charAt(i); 
     fld.value += decSep + aux.substr(len - 4, len); 
	}
   }
    return false; 
  }