2009-10-09 9 views
0

Quelle est la meilleure méthode pour masquer un champ de saisie pour autoriser uniquement float/double, sans plugin jquery.jQuery validation d'entrée pour double/float

Acutally que je fais comme ça:

$("#defaultvalue").bind("keypress", function(e) { 
       if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) { 
        return false; 
       } 
      }); 

mais c'est seulement pour les numéros thx

+0

une solution utilisant l'expression rationnelle serait bien, parce que je dois aussi être en mesure de vérifier une valeur qui est déjà en la zone de texte (délimitée) – k0ni

Répondre

1

JavaScripts parseFloat() fonction renvoie NaN, lorsque votre entrée est pas un numéro. Pour i18n vous devrez probablement remplacer le séparateur à virgule flottante (par exemple, avec.)

+0

parseFloat tronque au premier non-chiffre. parseFloat ('1.23ABC') == 1.23. – Greg

+0

Oh, vous avez raison. N'a pas testé cela ... peut-être une combinaison avec Regex et parseFloat a plus de sens alors. – Daff

+0

oui, mais comment utiliser l'expression régulière correctement? Je ne l'ai pas mis en marche .. – k0ni

1
parseFloat(value) and value.match('^[0-9]*\.[0-9]*$') 

Je suppose que vous pouvez laisser tomber le parseFloat et il suffit d'utiliser l'expression rationnelle.

1

Dans la page HTML, appelez simplement la méthode JS SetFloatEntry.

Exemple:

<html> 
<script> 
$(document).ready(function() { 

SetFloatEntry("weight"); 

}); 
</script> 
<body> 
    <input id="weight" type="text" /> 
</body> 
</html> 

Mettre cela sur votre JS fichier refered:

/* Main function */ 
function SetFloatEntry(fieldName) { 
    $("#" + fieldName).keydown(function (event) { 

     return NumericField($("#" + fieldName).val(), event, true); 

    }); 
} 


/* Auxiliar */ 
var strUserAgent = navigator.userAgent.toLowerCase(); 
var isIE = strUserAgent.indexOf('msie') > -1; 

var reKeyboardChars = /[\x03\x08\x09\x0D\x16\x18\x1A\x2E\x23\x24\x25\x26\x27\x28\x2D]/; 
var reNumber = /^((\d{1,3}\.)*\d{3}|\d*,{0,1}\d+|(\d{1,3}\.)*\d{3},{0,1}\d+|\d*)$/; 

function NumericField(str, objEvent, isFloat) { 

    oldValue = str; 
    strKey = GetChar(objEvent); 

    if (((objEvent.which) ? objEvent.which : event.keyCode) == 13 
     || (((objEvent.which) ? objEvent.which : event.keyCode) == 190 && isFloat)) 
     return true; 

    if (!KeyNumber(objEvent) 
      && !reKeyboardChars.test(strKey) 
      && !(objEvent.ctrlKey 
       && reClipboard.test(strKey))) 
     return false; 

    return true; 
} 

function KeyNumber(objEvent) { 
    return reNumber.test(GetChar(objEvent)); 
} 

function GetChar(objEvent) { 
    var arrKeys = new Array(); 
    arrKeys[96] = '0'; 
    arrKeys[97] = '1'; 
    arrKeys[98] = '2'; 
    arrKeys[99] = '3'; 
    arrKeys[100] = '4'; 
    arrKeys[101] = '5'; 
    arrKeys[102] = '6'; 
    arrKeys[103] = '7'; 
    arrKeys[104] = '8'; 
    arrKeys[105] = '9'; 

    arrKeys[111] = '/'; 
    arrKeys[193] = '/'; 

    iKeyCode = GetKeyCode(objEvent); 

    if (arrKeys[iKeyCode] != null) 
     return arrKeys[iKeyCode]; 

    return String.fromCharCode(iKeyCode); 
} 

function GetKeyCode(objEvent) { 
    if (isIE) 
     return objEvent.keyCode; 
    return objEvent.which; 
} 
+0

n'est-ce pas trop à faire? –

+0

Cela vérifie toutes les mauvaises entrées et le format aussi. – Weslei