Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Array.splice() funktioniert nicht

Frage Entwicklung JavaScript

Mitglied: Shardas

Shardas (Level 1) - Jetzt verbinden

23.04.2014 um 12:34 Uhr, 1593 Aufrufe, 6 Kommentare, 2 Danke

Liebe Javascript-Könner,

mit array.splice lassen sich Elemente komplett aus Arrays entfernen. Leider will das bei mir nicht wirklich:

content[0] = object {name=test, value="testvalue"}
content[1] = object {name=test2, value="testvalue2"}
content[2] = object {name=test3, value=""}
usw.

Es gibt nun Objekte, dessen Value ein leerstring ist. Diese kann ich anhand

$.each(content, function(i, v) {
if (v.value === "") {
console.log(v);
}
});

identifizieren. console.log(v) zeigt mir genau die Objekte mit leeren Value String. Diese müssen nun dem Array entnommen werden.
Tausche ich console.log durch content.splice(i,1) aus erhalte ich im Log die Meldung:

TypeError: v is undefined
if (v.value === "") {

a20bd20b338ccfc71d252179a3b17d82 - Klicke auf das Bild, um es zu vergrößern

Ich bin in JS noch zu unerfahren um mit diesem Fehler umzugehen.
Hat jemand Lösungsansätze für mich?

Vielen Dank
Mitglied: colinardo
23.04.2014, aktualisiert um 18:39 Uhr
Hallo Shardas,
deine Objektdeklaration stimmt nicht so ganz, so sollte es funktionieren:
01.
var content = new Array(); 
02.
content[0] = new Object({name:"test", value:"testvalue"}); 
03.
content[1] = new Object({name:"test2", value:"testvalue2"}); 
04.
content[2] = new Object({name:"test3", value:""});
http://www.w3schools.com/js/js_objects.asp

Grüße Uwe
Bitte warten ..
Mitglied: Shardas
23.04.2014, aktualisiert um 13:58 Uhr
Hallo Uwe und danke für deine Hilfe,

ich muss etwas weiter ausholen. Das Array kommt nicht von mir, sondern von der funktion serializeArray(). Hintergrund ist ein Formular welches per serializeArray() in ein Array verwandelt wird:

var content = $("#Formular").serializeArray();

daher ist die Objektdeklaration korrekt.
Beispiel content[0] ist das erste Formularfeld welches hier für die Anrede zuständig ist:
console.log(content[0]) beinhaltet Object { name="salutation", value="Herr"}

Ziel: befindet sich in einem Objekt des Arrays eine Leerstring als value, muss dieses Objekt aus dem Array entfernt werden, damit es später nicht submitted wird.

VG
Bitte warten ..
Mitglied: colinardo
23.04.2014, aktualisiert um 18:40 Uhr
Ah OK, dann hast du sehr wahrscheinlich Felder oder Formularelemente in deinem Formular bei dem das Attribut value fehlt und deshalb eine Exception ausgeworfen wird. Also entweder filterst du deine Elemente welche du mit Serialize in das Array beförderst und bei denen du weißt das ein value-Attribut vorhanden ist
var content = $('#testform input').serializeArray();
oder du prüfst zusätzlich ob die Value-Eigenschaft überhaupt vorhanden ist.

Grüße Uwe
Bitte warten ..
Mitglied: Shardas
23.04.2014 um 16:48 Uhr
Mensch, so leicht kanns sein. Einfach mit der IF-Abfrage "undefined" vorher abfangen
Das klappt recht gut.

Allerdings:
In dem Formular gibt es drei Passwort Felder (aktuelles, neues, und neues bestätigen). Interessanter weiße wird das zweite Feld nicht rausgefiltert, obwohl Value auch ein leerstring ist. Feld 1 und 3 werden entfernt. Dieses Feld unterscheidet sich bis auf den Namen in keinster weise zu den anderen Feldern.

01.
<input type="password" name="actualPassw"> //wird entfernt wenn ohne Inhalt 
02.
<input type="password" name="newPassw"> //wird nicht entfernt 
03.
<input type="password" name="newPasswConf"> //wird entfernt
Das ist doch nicht logisch?
Bitte warten ..
Mitglied: colinardo
LÖSUNG 23.04.2014, aktualisiert 24.04.2014
Zitat von Shardas:
Das ist doch nicht logisch?
Doch, mir fällt gerade auf, in dem Script ist ein Designfehler! Denn es entfernt in der Schleife Elemente via Index, jedoch passt der Index nach dem Entfernen eines Elementes nicht mehr zum korrekten Element im content-Array, da dies dann schon ein Element kleiner ist.

Das kannst du so lösen, indem du einfach aus den Elementen die Inhalt haben ein neues Array baust:
01.
var content = $('#testform').serializeArray(); 
02.
var newcontent = new Array(); 
03.
$.each(content,function(i,v){ 
04.
	if (v.value !== undefined && v.value !== ""){ 
05.
		newcontent.push(v); 
06.
07.
}); 
08.
console.log(newcontent);
Bitte warten ..
Mitglied: Shardas
23.04.2014 um 20:24 Uhr
Mensch, Wahnsinn
Darauf bin ich nicht gekommen. Bei PHP wird der Index nicht neu geschrieben wenn ein Element entfernt wird.

Danke, das war die Lösung!
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Linux
LTSP: PXE Boot funktioniert nicht (22)

Frage von Fenris14 zum Thema Linux ...

PHP
gelöst Php regex und Array (5)

Frage von Thomas91 zum Thema PHP ...

C und C++
gelöst Anzahl der Buchstaben in einem String Element Array C++ (3)

Frage von Protected zum Thema C und C ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...