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 + "
- Appel Ajax en cochant une case
- Comment changer les messages d’erreur de modèle html5 pour les courriels
- Comment envoyer un object javascript d’une page à une autre?
- Obtenir du texte derrière un élément
- Google plus une boîte de dialog lorsque vous passez la souris sur la vignette?
" + "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.