Chciałbym wiedzieć, jak sprawdzić, czy tablica jest pusta lub zerowa w jQuery. Próbowałem, array.length === 0
ale to nie zadziałało. Nie zgłosił też żadnego błędu.
To jest kod:
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
}
$("input[name='album_text[]']")
zwraca elementy?Odpowiedzi:
Dopóki twój selektor faktycznie działa, nie widzę nic złego w twoim kodzie, który sprawdza długość tablicy. To powinno zrobić, co chcesz. Istnieje wiele sposobów na uporządkowanie kodu, aby był prostszy i bardziej czytelny. Oto poprawiona wersja z notatkami o tym, co wyczyściłem.
Kilka uwag o tym, co robiłeś i co zmieniłem.
$(this)
jest zawsze prawidłowym obiektem jQuery, więc nie ma powodu, aby kiedykolwiek go sprawdzaćif ($(this))
. Może nie mieć w sobie żadnych obiektów DOM, ale możesz to sprawdzić,$(this).length
jeśli potrzebujesz, ale nie jest to konieczne, ponieważ.each()
pętla nie działałaby, gdyby nie było żadnych elementów, więc$(this)
wewnątrz.each()
pętli zawsze będzie coś.[]
zamiastnew Array()
.if (value)
gdy oczekuje się, że wartość będzie ciągiem znaków, będzie zarówno chronionavalue == null
, jakvalue == undefined
ivalue == ""
nie musisz tego robićif (value && (value != ""))
. Możesz po prostu zrobić:if (value)
sprawdzić wszystkie trzy puste warunki.if (album_text.length === 0)
powie ci, czy tablica jest pusta, o ile jest poprawną, zainicjowaną tablicą (która jest tutaj).Co próbujesz zrobić z tym selektorem
$("input[name='album_text[]']")
?źródło
===
), chyba że specjalnie chcę zezwolić na konwersję typu. To dobry nawyk.JQuery użytkownika jest EmptyObject, aby sprawdzić, czy tablica zawiera elementy, czy nie.
źródło
isEmptyObject
zawsze zwracafalse
ifArray.prototype
jest rozszerzony, np.Array.prototype.someFunction = function () {};
- nawet jeśli tablica jest pusta. Zauważ, że niektóre frameworki (np. Ember.js) domyślnie rozszerzają prototyp Array.isEmptyObject
! Dla jQuery 1.8.3jQuery.isEmptyObject([])
zwracafalse
, ale dla jQuery 1.11.3 zwracatrue
. W rzeczywistości dokumentacja jQuery mówi, że argument powinien zawsze być zwykłym obiektem JavaScript, ponieważ inne typy obiektów (elementy DOM, prymitywne łańcuchy / liczby, obiekty hosta) mogą nie dawać spójnych wyników we wszystkich przeglądarkach. Przepraszamy, nie widziałem odpowiedzi @rhinoxi.Powinieneś sprawdzić
''
(pusty ciąg) przed wypchnięciem do swojej tablicy. Twoja tablica zawiera elementy, które są pustymi ciągami. Wtedy twojaalbum_text.length === 0
wola będzie działać dobrze.źródło
if( $(this).val() && $(this).val() != '')
ale nie działa.Myślę, że używanie $ .isEmptyObject z jquery do sprawdzenia, czy tablica jest pusta, jest niebezpieczne, jak wspomniał @jesenko. Właśnie spotkałem się z tym problemem.
W dokumencie isEmptyObject wspomina się o:
które możesz określić za pomocą
$.isPlainObject
. Zwrot$.isPlainObject([])
jest fałszywy.źródło