Foros del Web » Programando para Internet » Javascript »

Entrada numérica compatible textbox con navegadores

Estas en el tema de Entrada numérica compatible textbox con navegadores en el foro de Javascript en Foros del Web. Hola: El siguiente código permite la entrada de números enteros y 2 decimales, tiene una adaptación para obtener la tecla presionada para distintos navegadores, la ...
  #1 (permalink)  
Antiguo 22/07/2011, 16:23
 
Fecha de Ingreso: enero-2003
Mensajes: 120
Antigüedad: 21 años, 11 meses
Puntos: 0
Entrada numérica compatible textbox con navegadores

Hola:
El siguiente código permite la entrada de números enteros y 2 decimales, tiene una adaptación para obtener la tecla presionada para distintos navegadores, la línea comentada era la anterior, estaba andando el ejemplo pero no en Firefox, por esta razón probé una sugerencia del foro, pero la variable evento_key me la muestra como undefined (véase la línea con ALERT), porqué puede ser? Le puse VAR a la izquierda pero tampoco. Mas abajo pongo la línea de input.

Código:
function fieldNumber (objeto , deci) 
     { 
	evento_key = (document.all) ? objeto.keyCode : objeto.which;
	alert(evento_key);
//      var evento_key = window.event.keyCode; 
        var valorCampo; 
        var numPosPunto = 0; 
        var strParteEntera = ""; 
        var strParteDecimal = ""; 
        var NUM_DECIMALES = deci; 

        switch (evento_key) 
        { 
            case 48: 
            case 49: 
            case 50: 
            case 51: 
            case 52: 
            case 53: 
            case 54: 
            case 55: 
            case 56: 
            case 57: 
            case 46: 
                break; 
            default: 
                window.event.keyCode = 0; 
                return false; 
        } 
        
		
		valorCampo = objeto.value; 
        if (evento_key == 46) {
             if (deci == 0) {
               window.event.keyCode = 0; 
               return false;
            }
        }
        if (evento_key == 46) 
            if (valorCampo.indexOf(".") != -1) 
            { 
                window.event.keyCode = 0; 
                return false; 
            } 
        /* Sَlo puede teclear el nْmero de decimales indicado en NUM_DECIMALES */ 
        if ((numPosPunto = valorCampo.indexOf(".")) != -1) 
        { 
            strParteEntera = valorCampo.substr(0,(numPosPunto - 1)); 
            strParteDecimal = valorCampo.substr((numPosPunto + 1), valorCampo.length) 
            if (strParteDecimal.length > (NUM_DECIMALES - 1)) 
            { 
                window.event.keyCode = 0; 
                return false; 
            } 
        } 
        return true; 
}

HTML

Probé sin RETURN y no funciona nada.

Código:
<input name="defecto" onKeyPress="return fieldNumber(this,2)" type="text"  size="10"  />
__________________
Sergio.
  #2 (permalink)  
Antiguo 22/07/2011, 16:51
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: Entrada numérica compatible textbox con navegadores

no hace falta pasar el objeto, sino el event por la compatibilidad multinavegador, mi función:

Código Javascript:
Ver original
  1. var _chardecimal = '.';    //DEFINIR separador de la parte decimal
  2.  
  3. function inputFloat(e,minus){
  4.     var menos = minus || false;
  5.     if(e==null){
  6.         e=event;
  7.     }
  8.     if(e==null){
  9.         e=window.event;
  10.     }
  11.     var tecla = (document.all) ? e.keyCode : e.which;
  12.     //48=0,57=9, 45=menos
  13.     if(tecla==8)return true;//backs
  14.     if(tecla==_chardecimal.charCodeAt(0)) return true; //punto decimal
  15.     if (tecla==45){
  16.         if (!menos){
  17.             return false;
  18.         }
  19.     }else if(tecla < 48 || tecla > 57){
  20.         return false;
  21.     }
  22.     return true;
  23. }

uso
<input name="defecto" onKeyPress="return inputFloat(event)" type="text" size="10" />
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 23/07/2011, 05:58
 
Fecha de Ingreso: enero-2003
Mensajes: 120
Antigüedad: 21 años, 11 meses
Puntos: 0
Respuesta: Entrada numérica compatible textbox con navegadores

Muchas gracias por responder, agregué cosas de tu rutina a la mía, ahora solo anda en internet explorer y chrome pero firefox no. jeje a ver si me das una manito. gracias.


Código:
function fieldNumber (e, objeto2 , deci) 
     { 
	 //   var menos = minus || false;
		if(e==null){
			 e=event;
        }
	    if(e==null){
		   e=window.event;
		}
		var evento_key = (document.all) ? e.keyCode : e.which;
	 
	//  evento_key = (document.all) ? objeto.keyCode : objeto.which;
		alert(evento_key);
    //  var evento_key = window.event.keyCode;
	
        var valorCampo; 
        var numPosPunto = 0; 
        var strParteEntera = ""; 
        var strParteDecimal = ""; 
        var NUM_DECIMALES = deci; 

        switch (evento_key) 
        { 
            case 48: 
            case 49: 
            case 50: 
            case 51: 
            case 52: 
            case 53: 
            case 54: 
            case 55: 
            case 56: 
            case 57: 
            case 46: 
                break; 
            default: 
                window.event.keyCode = 0; 
                return false; 
        } 
        
	// aquí aparece objeto2 que sería el THIS enviado.	
		valorCampo = objeto2.value; 
        if (evento_key == 46) {
             if (deci == 0) {
               window.event.keyCode = 0; 
               return false;
            }
        }
        if (evento_key == 46) 
            if (valorCampo.indexOf(".") != -1) 
            { 
                window.event.keyCode = 0; 
                return false; 
            } 
	    chardecimal=".";
        /* Sَlo puede teclear el nْmero de decimales indicado en NUM_DECIMALES */ 
        if ((numPosPunto = valorCampo.indexOf(".")) != -1) 
        { 
            strParteEntera = valorCampo.substr(0,(numPosPunto - 1)); 
            strParteDecimal = valorCampo.substr((numPosPunto + 1), valorCampo.length) 
            if (strParteDecimal.length > (NUM_DECIMALES - 1)) 
            { 
                window.event.keyCode = 0; 
                return false; 
            } 
        } 
        return true; 
}
Código:
<input name="maximo" onKeyPress="return fieldNumber(event,this,0)" type="text" id="maximo" size="3" maxlength="3"
__________________
Sergio.

Última edición por serbarmax; 23/07/2011 a las 10:07

Etiquetas: compatible, entrada, html, navegadores, textbox
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:05.