2011-08-30 29 views
17

OK Mam okno dialogowe jQuery, które ma postać i jestem na końcu mojego rozumu, próbując to zrozumieć ... Zobaczmy, czy potrafię zwerbalizować to, co próbuję zrobić.jquery: jeśli ul jest pusty

Mam 3 pola tekstowe. #apInterest, #apPayment i #apPrincipal w tej kolejności.

Basic English kategoriach tego, co próbuję zrobić:

na keyup w #apInterest jeśli .val jest mniejsza niż 0 lub większa niż 99,99 wywoła błędu .. jeszcze sprawdzić ul#mylist jeśli ma żadnych li, jeśli nie .hide

na klucz w #apPayment jeśli .val jest mniejszy niż 0, wywołaj błąd, sprawdź, czy lista dla li jest ukryta, jeśli nie.

#apPrincipal to samo dokładnie jak #apPayment

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

Chociaż Próbowałem również

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

miałem funkcję podobną do tego dla wszystkich 3 pola tekstowe, ale nic z tego, co próbowałem, nie działa. Wszelkie pomysły na uzupełnienie tego

+0

możliwe duplikat [jQuery jeśli div id ma dzieci] (http://stackoverflow.com/questions/1526873/jquery-if-div-id-has-children) Ten –

Odpowiedz

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

jest częstym i łatwym do zrozumienia błędem ze strony Justina. '$ (" # mylist: not (: contains (li)) ") nigdy nie będzie miało wartości NULL; zawsze tworzy obiekt jQuery, nawet jeśli selektor nie pasuje do niczego. Testowanie długości obiektu w ten sposób jest drogą do zrobienia. – Blazemonger

+0

to zadziałało dla mnie, tak samo posta Josepha Silbera: – Justin

+0

lepiej Ci radzić, porównując $ ('# mylist li'). Length === 0 jak ten – Ajey

3

jQuery zawsze zwraca tablicę elementów. Jeśli nie znaleziono pasujących elementów, tablica będzie pusta. Pusta tablica w JavaScript wartość true:

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

Chcesz sprawdzić długość zwróconego zestawu:

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

to zadziałało, chociaż ... próbowałem obu. – Justin

5

Lubię stosując metodę children() ponieważ brzmi ładnie i działa nawet jeśli już zbuforowałem selektor dla twojego ul. Oto jak to wygląda:

$myList = $('#myList') 
if ($myList.children().length === 0) ... 
Powiązane problemy