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(); }