Ich möchte wissen, wie man prüft, ob ein Array in jQuery leer oder null ist. Ich habe es versucht, array.length === 0
aber es hat nicht funktioniert. Es wurde auch kein Fehler ausgegeben.
Dies ist der Code:
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[]']")
tatsächlich Elemente zurückgegeben werden?Antworten:
Solange Ihr Selektor tatsächlich funktioniert, sehe ich nichts Falsches an Ihrem Code, der die Länge des Arrays überprüft. Das sollte machen was du willst. Es gibt viele Möglichkeiten, Ihren Code zu bereinigen, um einfacher und besser lesbar zu sein. Hier ist eine bereinigte Version mit Notizen darüber, was ich aufgeräumt habe.
Einige Notizen darüber, was Sie getan haben und was ich geändert habe.
$(this)
ist immer ein gültiges jQuery-Objekt, daher gibt es keinen Grund, dies jemals zu überprüfenif ($(this))
. Es enthält möglicherweise keine DOM-Objekte, aber Sie können dies bei$(this).length
Bedarf überprüfen. Dies ist hier jedoch nicht erforderlich, da die.each()
Schleife nicht ausgeführt werden würde, wenn keine Elemente vorhanden wären. In$(this)
Ihrer.each()
Schleife befindet sich also immer etwas.[]
anstatt zu initialisierennew Array()
.if (value)
Wenn erwartet wird, dass der Wert eine Zeichenfolge ist, wird beides geschütztvalue == null
,value == undefined
undvalue == ""
Sie müssen dies nicht tunif (value && (value != ""))
. Sie können einfach tun:if (value)
Überprüfen Sie alle drei leeren Bedingungen.if (album_text.length === 0)
wird Ihnen sagen, ob das Array leer ist, solange es sich um ein gültiges, initialisiertes Array handelt (das es hier ist).Was versuchst du mit diesem Selektor zu machen
$("input[name='album_text[]']")
?quelle
===
), es sei denn, ich möchte ausdrücklich eine Typkonvertierung zulassen. Es ist eine gute Angewohnheit, sich darauf einzulassen.Benutzer JQuery ist EmptyObject, um zu überprüfen, ob das Array Elemente enthält oder nicht.
quelle
isEmptyObject
Gibt immer zurück,false
wennArray.prototype
es erweitert ist, z. B.Array.prototype.someFunction = function () {};
- auch wenn das Array leer ist. Beachten Sie, dass einige Frameworks (z. B. Ember.js) den Array-Prototyp standardmäßig erweitern.isEmptyObject
! Für jQuery 1.8.3 wirdjQuery.isEmptyObject([])
zurückgegebenfalse
, für jQuery 1.11.3 wird jedoch zurückgegebentrue
. Eigentlich jQuery-Dokumentation heißt es, dass das Argument immer ein einfaches JavaScript-Objekt sein sollte, da andere Objekttypen (DOM-Elemente, primitive Zeichenfolgen / Zahlen, Hostobjekte) möglicherweise keine konsistenten Ergebnisse für alle Browser liefern. Entschuldigung, ich habe die Antwort von @rhinoxi nicht gesehen.Sie sollten nach
''
(leere Zeichenfolge) suchen, bevor Sie in Ihr Array pushen. Ihr Array enthält Elemente, die leere Zeichenfolgen sind. Dann wird deinalbum_text.length === 0
Wille gut funktionieren.quelle
if( $(this).val() && $(this).val() != '')
aber er funktioniert nicht.Ich denke, es ist gefährlich, $ .isEmptyObject von jquery zu verwenden, um zu überprüfen, ob das Array leer ist, wie @jesenko erwähnte. Ich habe gerade dieses Problem getroffen.
Im isEmptyObject-Dokument wird Folgendes erwähnt:
was Sie durch bestimmen können
$.isPlainObject
. Die Rückgabe von$.isPlainObject([])
ist falsch.quelle