2011-08-30 28 views
17

Bien, tengo un cuadro de diálogo jQuery que tiene un formulario y estoy en mi ingenio final tratando de resolver esto ... Veamos si puedo verbalizar lo que estoy tratando de hacer.jquery: si ul está vacío

Tengo 3 cuadros de texto. #apInterest, #apPayment y #apPrincipal en ese orden exacto.

Todos los términos básicos de lo que estoy tratando de hacer:

en keyup en #apInterest si .val es menor que 0 o mayor que 99,99 gatillo de un error .. otra cosa ul#mylist comprobar si tiene algún li, si no .hide

en keyup en #apPayment si .val es inferior a 0 gatillo de un error demás compruebe la lista de li ocultar si no.

#apPrincipal es lo mismo exactamente como #apPayment

lo que tengo en este mismo momento

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

Aunque también he intentado

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

que tenía una función similar a esto para todos 3 cuadros de texto, pero ninguno de los que he probado parece funcionar ... alguna idea sobre cómo completar esto

+0

posible duplicado de [jQuery si tiene hijos div id] (http://stackoverflow.com/questions/1526873/jquery-if-div-id-has-children) –

Respuesta

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

Este es un error común y fácil de entender por parte de Justin. '$ (" # mylist: not (: contains (li)) ")' nunca será nulo; siempre producirá un objeto jQuery, incluso si el selector no coincide con nada. Probar la longitud del objeto de esta manera es el camino a seguir. – Blazemonger

+0

esto funcionó para mí, también lo hizo la publicación de Joseph Silber – Justin

+0

, es mejor comparar $ ('# mylist li'). Longitud === 0 como este – Ajey

3

jQuery siempre devuelve una matriz de elementos. Si no se encontraron coincidencias, la matriz estará vacía. Una matriz vacía en Javascript se evalúa como verdadera:

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

desea comprobar la longitud del conjunto devuelto:

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

aunque funcionó ... intenté ambos. – Justin

5

me gusta usar el método children() porque lee muy bien y funciona incluso si Ya he almacenado en caché el selector para tu ul. Esto es lo que parece:

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