Résultat inattendu de la comparaison «supérieur à» des valeurs d’une entrée de texte

Je rencontre un bogue mathématique JavaScript / jQuery étrange lorsque je tente de déterminer si une valeur est supérieure à une autre.

Voici un lien, en utilisant jsFiddle, vers mon code: http://jsfiddle.net/qxeTj/

$("#Quantity").live("focusout", function() { var qty = +$(this).val(); var stock = +$('#StockLvl').val(); if (qty > stock) { $('#Result').html("

Quantity: " + qty + "

Stock: " + stock + "

" + "

Not Enough Stock.

"); } else if (stock > qty || stock == qty) { $('#Result').html("

Quantity: " + qty + "

Stock: " + stock + "

" + "

Enough Stock.

"); } });

Exemple de problème:

Lorsque je me concentre sur le champ d’ input , s’il a une valeur de 1 ou 2 , cela fonctionne bien. Cela fonctionne même si j’ai une valeur de 3, 4, 5, 6, 7, 8, 9 .

Mais le problème est alors lorsque j’utilise les valeurs 10-19 ou 100-199 ou 1000-1999 , etc. Il est dit qu’il a assez de stock alors qu’il ne devrait pas.

Vous comparez des chaînes. Convertissez-les d’abord en nombres.

 var qty = Number( $(this).val() ); var stock = Number( $('#StockLvl').val() ); 

ou

 var qty = +$(this).val(); var stock = +$('#StockLvl').val(); 

ou

Cette façon sera la plus sûre dans votre cas.

 var qty = parseInt( $(this).val(), 10 ); var stock = parseInt( $('#StockLvl').val(), 10 ); 

Vous avez affaire à une comparaison de chaînes et non à un nombre. Mettez un parseInt autour des valeurs et vous obtiendrez le résultat attendu.