2 votes

Pourquoi isNaN ne fonctionne-t-il pas la deuxième fois qu'il est appelé ?

J'ai besoin de valider plusieurs champs de saisie pour les caractères non numériques. J'utilise également des alertes Bootstrap. J'ai donc le code ci-dessous. Il fonctionne bien la première fois que vous faites une erreur. Vous obtenez l'alerte BS. J'ai vérifié le contenu des deux variables qty et quantity et en effet, au deuxième passage du code, elles contiennent bien le mauvais caractère non numérique. Mais pour une raison quelconque, isNaN ne le voit pas. Qu'est-ce que je fais de mal ?

$(".product_table").on('change', '.edit_quantity',function (){

  var qty = $(this).find('input').val();
  var quantity = $(this).parents(':eq(1)').find('input').filter(".edit_quantity").val();

  console.log('l 117', qty);
  console.log('l 118', quantity);

  if (isNaN(quantity||qty))
  {
      $("#char_error").show();
  }
  else
  {
  //more code goes here//
  }
}

HTML :

 <div id="char_error" class="alert alert-danger">
    <strong>Error</strong> You have entered an illegal character in the quantity box, please enter a number.
    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span>
    </button>
</div>

De plus, je démarre mon fichier JS en cachant l'élément <div id="char_error"> Ce n'est pas non plus l'idéal si le contenu clignote puis disparaît.

5voto

Qwertiy Points 6707

Parce qu'il n'est appelé qu'une seule fois.

if (isNaN(quantity||qty)) {

est la même chose que

var t = quantity||qty;
if (isNaN(t)) {

Au lieu de cela, vous avez besoin

if (isNaN(quantity) || isNaN(qty)) {

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X