jquery: si ul est vide

Ok, j’ai une boîte de dialog jQuery qui contient une forme et je suis à bout de forces en essayant de comprendre ceci … Voyons si je peux verbaliser ce que je cherche à faire ..

J’ai 3 zones de texte. #apInterest , #apPayment et #apPrincipal dans cet ordre exact.

termes anglais de base de ce que j’essaie de faire:

sur keyup dans #apInterest si .val est inférieur à 0 ou supérieur à 99,99 déclenchez une erreur .. sinon vérifiez ul#mylist s’il a un li , sinon .hide

sur keyup dans #apPayment si .val est inférieur à 0, déclenchez une erreur, sinon vérifiez dans la liste si .val est .val sinon.

#apPrincipal est exactement la même chose que #apPayment

ce que j’ai en ce moment

 $('#apInterest').live("keyup", function(e) { var parent = $('.inter').parents("ul:first"); if ($('#apInterest').val()  99.99) { $('.inter').remove(); $('#mylist').append('
  • Interest Rate cannot be below 0 or above 99.99
  • '); $('#popuperrors').show(); $(this).addClass('error'); } else { $(this).removeClass('error'); $('.inter').remove(); alert(parent.children().text); if (parent.children().length == 0){ $('#popuperrors').hide(); } } });

    Bien que j’ai aussi essayé

     if ($("#mylist :not(:contains(li))") ){ $('#popuperrors').hide(); } 

    J’avais une fonction similaire à celle-ci pour les 3 zones de texte, mais rien de ce que j’ai essayé ne semble fonctionner .. aucune idée sur la façon de compléter cette zone.

     if ($('#mylist li').length == 0) ... 

    J’aime utiliser la méthode children() car elle se lit bien et fonctionne même si vous avez déjà mis en cache le sélecteur pour votre ul. Voici à quoi ça ressemble:

     $myList = $('#myList') if ( $myList.children().length === 0 ) ... 

    jQuery renvoie toujours un tableau d’éléments. Si aucune correspondance n’a été trouvée, le tableau sera vide. Un tableau vide en Javascript est évalué à true:

     console.log( !![] ); // logs: true 

    Vous voulez vérifier la longueur de l’ensemble renvoyé:

     if ( ! $("#mylist li").length ){ $('#popuperrors').hide(); }