2009-11-09 24 views
5

tengo este código en jQuery para que los caracteres no numéricos que se introducen en el campo de textoValidar campo de texto numérico en jQuery

$("#NumericField").numeric(); 

Ahora, en el campo de texto i cant introducir caracteres no numéricos. Es correcto. El problema aquí es si el usuario pegará en el campo de texto con caracteres no numéricos.

¿Hay alguna forma/método para desactivar el pegado si el valor no es numérico? ¿O hay algún otro enfoque para manejar esta situación que puedas compartir?

+0

Debería usar mejor una clase en lugar de una ID para identificar todos los campos numéricos. Ahora solo puede tener un solo campo numérico en una página. –

+0

Buena idea. Cambiaré mi código. –

Respuesta

5

puede utilizar devolución de llamada que comprueba a la salida de campo si el valor es válido si el valor no es válida, entonces clara y el mensaje para la demostración de error:

var decimal_char = ','; 
function isvalidnumber(){ 
    var val=$(this).val(); 
    //This regex is from the jquery.numeric plugin itself 
    var re=new RegExp("^\\d+$|\\d*" + decimal_char + "\\d+"); 
    if(!re.exec(val)){ 
     alert("Invalid number"); 
     $(this).val(""); 
    }  
} 
$(document).ready(function(){ 
    $("#txtN").numeric(decimal_char,isvalidnumber); 
}); 
+0

¿Quizás en vez de un mensaje de error, la entrada podría filtrarse para eliminar los caracteres ilegales? Podría ser más agradable para el usuario si pega un número que tiene un espacio al final, por ejemplo. – Kaivosukeltaja

+0

Lo he modificado. el primero no funcionaba y no tenía en cuenta el número decimal – TheVillageIdiot

+0

Voy a probar este ... –

0

me encontré con este script en http://www.kunalbabre.com/jQueryLibrary/index.php:

$('input[numeric]').keyup(function() {  
    var d = $(this).attr('numeric'); 

    var value = $(this).val(); 
    var orignalValue = value; 
    value = value.replace(/[0-9]*/g, ""); 

    var msg = "Only Integer Values allowed."; 

    if (d == 'decimal') { 
     value = value.replace(/\./, ""); 
     msg = "Only Numeric Values allowed."; 
    } 

    if (value != '') { 
     orignalValue = orignalValue.replace(/([^0-9].*)/g, "") 
     $(this).val(orignalValue); 
     //alert(msg); 
     $(this).after('<span style="margin-left:5px;color:red;position:absolute;">' + msg + '</span>'); 
    } else { 
     $(this).next('span').remove(); 
    } 
}); 

Funciona bien excepto si el número tiene ',' en él como '100,000.00'. Rendirá solo '100'. El ',' y el resto se han ido.

Editar: Creo que esto está en el registro pero no tengo idea al respecto. ?? :(

Cualquier Idea Ayuda

1

donde dice:

value = value.replace(/\./, ""); 

se debería poner:

value = value.replace(/\.\,/, ""); 

supongo ;-)

Realmente terminé haciendo esto:

$(‘.InputClass’).keyup(function(){ 
    if ($(this).val() != "") 
    $(this).val($(this).val().replace(/[^0-9\.]/g, "")); 
}); 

Por lo tanto, no hay alertas molestas ni nada; solo si escribe algo más que un número o un punto después de un número, se desactiva. Simple pero efectivo.

Saludos. Hope ayuda a alguien

Cuestiones relacionadas