2011-08-25 25 views
83

Bir dizinin boş ya da boş olduğunu kontrol etmeyi öğrenmek istiyorum jQuery. array.length === 0'u denedim ama işe yaramadı. Bu da herhangi bir hata atmadı. Sen '' (boş dize) için kontrol etmelidirDizinin boş ya da boş olup olmadığını kontrol edin

var album_text = new Array(); 

$("input[name='album_text[]']").each(function(){ 
    if($(this).val() && $(this).val() != '') { 
    album_text.push($(this).val()); 
    } 
}); 
if (album_text.length === 0) { 
    $('#error_message').html("Error"); 
} 

else { 
    // send data 
} 
+2

"Normal JavaScript" ile aynı şekilde: http: // stackoverflow.com/questions/2672380/how-do-i-check-a-javascript-array-değeri-boş-or-null –

+1

@Julien, Bu iş parçacığı başlamadan önce bu iş parçacığı içinde listelenen tüm bu çözümleri denedim. Hiçbiri bir şekilde işe yaramadı. – input

+0

İçerik için biraz daha kod alabilir miyiz? Çevreleyen JavaScript, HTML? '$ ("Input [name =' album_text [] ']") 'ın aslında öğeleri döndürdüğünden emin misiniz? –

cevap

123

Seçiciniz gerçekten çalışıyorsa, kodunuzun dizinin uzunluğunu kontrol eden bir sorun göremiyorum. İstediğin şeyi yapmalı. Kodunuzu daha basit ve okunabilir olacak şekilde temizlemenin birçok yolu vardır. İşte ben temizledim ne hakkında temizlenmiş bir sürümü ile notlar.

var album_text = []; 

$("input[name='album_text[]']").each(function() { 
    var value = $(this).val(); 
    if (value) { 
     album_text.push(value); 
    } 
}); 
if (album_text.length === 0) { 
    $('#error_message').html("Error"); 
} 

else { 
    //send data 
} 

Ne yaptığınızı ve neyi değiştirdiğimi içeren bazı notlar. Hiç if ($(this)) kontrol etmek neden yok böylece

  1. $(this) daima geçerli bir jQuery nesnesidir. İçinde herhangi bir DOM nesnesi olmayabilir, ancak ihtiyacınız varsa $(this).length ile kontrol edebilirsiniz, ancak .each() döngüsünün döngüsünde 3 döngüsünüzün içinde çalışmamasından dolayı bu gerekli değildir. şey.
  2. Aynı işlevde birden çok kez $ (this) kullanmak için verimsiz. Bir kez bir yerel değişkene almak için çok daha iyi ve daha sonra bu yerel değişkenden kullanın.
  3. Dizilerin new Array() yerine [] ile başlatılması önerilir. değeri value == null, value == undefined ve value == "" böylece if (value && (value != "")) yapmak gerekmez bir dize hem koruyacak olması bekleniyor
  4. if (value). Sadece üç boş koşulu kontrol etmek için if (value) yapabilirsiniz. Geçerli, başlatılmış bir dizi (burada olduğu) olduğu sürece dizinin boş olup olmadığını söyleyecektir
  5. .

Bu seçici $("input[name='album_text[]']") ile ne yapmaya çalışıyorsunuz?

+5

@MaciekSemik - bkz. Http://stackoverflow.com/questions/359494/does-it-matter-which-equals-operator-vs-i-use-in-javascript-comparisons. Özellikle bir tür dönüşüme izin vermek istemediğim sürece katı eşitlik ('===') kullanırım. Girmek için iyi bir alışkanlık. – jfriend00

6

sizin diziye itmeden önce:

Bu

kodudur. Dizininiz boş dizeler olan öğelere sahiptir. Sonra senin album_text.length === 0 sadece iyi çalışır.

+0

Lütfen güncellenen kodu inceleyin. Bu kodu ekledim eğer ($ (this) .val() && $ (this) .val()! = '') 'Yine de çalışmıyor. – input

55

Kullanıcı JQuery, dizinin öğe içerip içermediğini denetlemek için EmptyObject öğesindenseçeneğidir.

var testArray=[1,2,3,4,5]; 
var testArray1=[]; 
console.log(jQuery.isEmptyObject(testArray)); //false 
console.log(jQuery.isEmptyObject(testArray1)); //true 
+1

Uzunluğunu kontrol etmekten çok daha güvenilir, özellikle değişkeniniz de bir nesne olabilirse (nesnelerle, uzunluk boş olup olmadığını kontrol etmek için çalışmaz). – gaborous

+0

Bu benim görüşüme göre daha uygun bir cevap. – earl3s

+3

'isEmptyObject', 'Array.prototype' genişletildiğinde ör. Array.prototype.someFunction = function() {}; '- dizi boş olsa bile. Bazı çerçevelerin (ör. Ember.js) Array prototipini varsayılan olarak uzattığını unutmayın. – jesenko

6

Ben @jesenko belirtildiği gibi dizi, boş olup olmadığını o kontrol etmek jquery dan $ .isEmptyObject kullanmak tehlikeli olduğunu düşünüyorum. Bu sorunu daha yeni tanıştım.

isEmptyObject doc olarak, söz:

argüman her zaman

Eğer $.isPlainObject tarafından belirleyebilir JavaScript Object düz olmalıdır. $.isPlainObject([]) dönüşü yanlış.

İlgili konular