D'accord, j'ai une boîte de dialogue jQuery qui a un formulaire et je suis à la fin de mon esprit essayant de comprendre cela ... Voyons si je peux verbaliser ce que j'essaie de 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:
au clavier dans #apInterest
si .val
est inférieur à 0 ou supérieur à 99,99 déclenche une erreur .. sinon vérifiez ul#mylist
s'il en a li
, sinon .hide
au clavier dans #apPayment
si .val
est inférieur à 0 déclencher une erreur sinon vérifier la liste pour li
masquer 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() < 0 || $('#apInterest').val() > 99.99) {
$('.inter').remove();
$('#mylist').append('<li class="inter">Interest Rate cannot be below 0 or above 99.99</li>');
$('#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'aie 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 .. des idées sur la façon de terminer cela
if ($('#mylist li').length == 0) ...
J'aime utiliser la méthode children()
car elle se lit bien et elle 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é comme vrai:
console.log( !![] ); // logs: true
Vous souhaitez vérifier la longueur de l'ensemble retourné:
if ( ! $("#mylist li").length ){
$('#popuperrors').hide();
}