Ich würde gerne wissen, wie man überprüft, ob ein Array in jQuery leer oder null ist. Ich habe es versucht array.length === 0 aber es hat nicht funktioniert. Es hat auch keinen Fehler ausgelöst.
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
}
Genauso wie in „normalem JavaScript“: stackoverflow.com/questions/2672380/…
– Julien Schmidt
25. August 2011 um 23:08 Uhr
@Julien, ich habe alle in diesem Thread aufgeführten Lösungen ausprobiert, bevor ich diesen Thread gestartet habe. Keiner von ihnen funktionierte irgendwie.
– Eingabe
25. August 2011 um 23:10 Uhr
Können wir etwas mehr Code für den Kontext bekommen? Umgebung von JavaScript, HTML? Sind Sie sicher, dass $("input[name='album_text[]']") gibt eigentlich Elemente zurück?
– Jon Adams
25. August 2011 um 23:33 Uhr
@JulienSchmidt: Die Frage, auf die Sie verlinkt haben, betrifft die Überprüfung, ob ein Array vorhanden ist Wert leer ist, nicht das gesamte Array.
– Dan Dascalescu
20. Januar 2017 um 20:57 Uhr
jfriend00
Solange Ihr Selektor tatsächlich funktioniert, sehe ich nichts Falsches an Ihrem Code, der die Länge des Arrays überprüft. Das sollte tun, was du willst. Es gibt viele Möglichkeiten, Ihren Code zu bereinigen, damit er einfacher und besser lesbar ist. Hier ist eine bereinigte Version mit Notizen darüber, was ich bereinigt habe.
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
}
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üfen if ($(this)). Es enthält möglicherweise keine DOM-Objekte, aber Sie können dies mit überprüfen $(this).length wenn Sie müssen, aber das ist hier nicht notwendig, weil die .each() Die Schleife würde nicht ausgeführt, wenn es keine Elemente gäbe $(this) in deinem .each() Schleife wird immer etwas sein.
Es ist ineffizient, $(this) mehrmals in derselben Funktion zu verwenden. Es ist viel besser, es einmal in eine lokale Variable zu bekommen und es dann von dieser lokalen Variablen aus zu verwenden.
Es wird empfohlen, Arrays mit zu initialisieren [] statt new Array().
if (value) wenn erwartet wird, dass der Wert eine Zeichenfolge ist, schützen beide vor value == null, value == undefined und value == "" also musst du das nicht machen if (value && (value != "")). Sie können einfach Folgendes tun: if (value) um alle drei leeren Bedingungen zu überprüfen.
if (album_text.length === 0) wird Ihnen sagen, ob das Array leer ist, solange es ein gültiges, initialisiertes Array ist (was hier der Fall ist).
Was versuchst du mit diesem Selektor zu tun? $("input[name="album_text[]"]")?
@MaciekSemik – siehe stackoverflow.com/questions/359494/…. Ich verwende immer strikte Gleichheit (===), es sei denn, ich möchte ausdrücklich eine Typkonvertierung zulassen. Es ist eine gute Angewohnheit, sich darauf einzulassen.
– jfriend00
13. April 2014 um 18:21 Uhr
Mayank Raipure
Benutzer JQuery ist EmptyObject, um zu prüfen, ob das Array Elemente enthält oder nicht.
var testArray=[1,2,3,4,5];
var testArray1=[];
console.log(jQuery.isEmptyObject(testArray)); //false
console.log(jQuery.isEmptyObject(testArray1)); //true
Viel zuverlässiger als die Prüfung der Länge, insbesondere wenn Ihre Variable auch ein Objekt sein kann (bei Objekten funktioniert die Länge nicht, um zu prüfen, ob sie leer ist).
– gierig
20. November 2014 um 2:43 Uhr
Das ist meiner Meinung nach die passendere Antwort.
– Earl3s
31. März 2015 um 17:49 Uhr
isEmptyObject kehrt immer zurück false wenn Array.prototype erweitert wird, z 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.
– Jessenko
11. Mai 2015 um 18:04 Uhr
Sei vorsichtig mit isEmptyObject!Für jQuery 1.8.3 jQuery.isEmptyObject([]) kehrt zurück falseaber für jQuery 1.11.3 kehrt es zurück true. Eigentlich, jQuery-Dokumentation sagt Das Argument sollte immer ein einfaches JavaScript-Objekt sein, da andere Objekttypen (DOM-Elemente, primitive Zeichenfolgen/Zahlen, Host-Objekte) möglicherweise keine konsistenten Ergebnisse in allen Browsern liefern. Tut mir leid, ich habe die Antwort von @rhinoxi nicht gesehen.
– Dmitri Werschinin
16. November 2016 um 9:00 Uhr
Ich denke, es ist gefährlich, $.isEmptyObject von jquery zu verwenden, um zu überprüfen, ob das Array leer ist, wie @jesenko erwähnt hat. Ich bin gerade auf dieses Problem gestoßen.
Das Argument sollte immer ein einfaches JavaScript-Objekt sein
anhand derer du es bestimmen kannst $.isPlainObject. Die Rückkehr von $.isPlainObject([]) ist falsch.
Sie sollten nachsehen '' (leerer String), bevor Sie in Ihr Array pushen. Ihr Array enthält Elemente, die leere Zeichenfolgen sind. Dann deine album_text.length === 0 wird gut funktionieren.
/*
Basic Checking with undefined array for Jquery Array
*/
if (typeof myArray !== 'undefined' && myArray.length > 0) {
console.log('myArray is not empty.');
}else{
console.log('myArray is empty.');
}
13111600cookie-checkÜberprüfen Sie, ob das Array leer oder null istyes
Genauso wie in „normalem JavaScript“: stackoverflow.com/questions/2672380/…
– Julien Schmidt
25. August 2011 um 23:08 Uhr
@Julien, ich habe alle in diesem Thread aufgeführten Lösungen ausprobiert, bevor ich diesen Thread gestartet habe. Keiner von ihnen funktionierte irgendwie.
– Eingabe
25. August 2011 um 23:10 Uhr
Können wir etwas mehr Code für den Kontext bekommen? Umgebung von JavaScript, HTML? Sind Sie sicher, dass
$("input[name='album_text[]']")
gibt eigentlich Elemente zurück?– Jon Adams
25. August 2011 um 23:33 Uhr
@JulienSchmidt: Die Frage, auf die Sie verlinkt haben, betrifft die Überprüfung, ob ein Array vorhanden ist Wert leer ist, nicht das gesamte Array.
– Dan Dascalescu
20. Januar 2017 um 20:57 Uhr