ID in Funktion zurücksetzen - javascript

Beavis1311

Grünschnabel
Hallo,

ich habe die Aufgabe eine Adressbuchverwaltung zu bauen (siehe Datei), bin aber auf ein Problem gestoßen und bitte euch um Hilfe.
Bei der Funktion "safe()" setzt er die "data-id" nach einem Durchlauf nicht zurück und kann somit nicht unterscheiden, ob ein Datensatz hinzugefügt oder bearbeitet werden muss.
Was müsste ich ändern, dass er sich die data-id nicht merkt und sozusagen immer von vorn beginnt mit prüfen.

Gruß
 

Anhänge

  • Adressbuchverwaltung - die Zweite.html
    8,4 KB · Aufrufe: 3
Hi,

du hast bloß einen kleinen Logikfehler.

Du liest in deiner save()-Funktion das Formularfeld mit der ID data-id aus. Am Ende der Funktion leerst du dann das Formular. In deiner inputleer()-Funktion setzt du jedoch das data-id-Formularfeld nicht zurück, das heißt nachdem du einen Eintrag bearbeitet hast, wird nachfolgend immer genau diese Eintrag geändert.

Wenn du z. B. den Eintrag mit der ID 2 änderst, bleibt diese 2 für den Rest des Programmablaufes im Formularfeld präsent. Wenn du dann einen Eintrag hinzufügen möchtest prüft dein Skript, ob das Formularfeld leer ist, denn davon gehst du aus, jedoch enthält es die 2.

So müsste deine inputleeren()-Funktion dann aussehen:
Javascript:
function inputleer(){
    document.getElementById("data-id").value=''; // Diese Zeile fehlt dir
    document.getElementById("Name").value='';
    document.getElementById("Vorname").value='';
    document.getElementById("Strasse").value='';
    document.getElementById("Hausnummer").value='';
    document.getElementById("PLZ").value='';
    document.getElementById("Ort").value='';
    document.getElementById("Mail").value='';
    document.getElementById("Webadresse").value='';
}

Wenn du etwas fortgeschrittener arbeiten möchtest auch gerne mit einer Schleife:
Javascript:
function inputleer(){
    var inputs = document.forms.formular.getElementsByTagName("input");

    for(var i = 0; i < inputs.length; i++)
    {
        inputs[i].value = "";
    }
}
 
Vielen Dank :)...funktioniert alles einwandfrei.

Könntet ihr mir vlt. noch einen Ansatz geben wie die Suchfunktion aufgebaut werden muss?..
 
Zuletzt bearbeitet:
Du könntest zum Beispiel dein Array datensatz mit Schleifen durchlaufen und jedes Feld mit dem eingegebenen Suchbegriff vergleichen. Wenn eine Übereinstimmung gefunden wird, kannst du den aktuellen Datensatz in ein neues Array einfügen. Am Ende dann prüfen ob Elemente im neuen Array vorhanden sind. Ist das der Fall, sind das die Datensätze mit Übereinstimmungen und können angezeigt werden.

So könnte das aussehen:
Javascript:
function search()
{
    var suchbegriff = document.getElementById("Suche").value;
    var ergebnisse = new Array();
   
    if(!suchbegriff)
    {
        // Funktion verlassen wenn Suchbegriff leer.
        return false;
    }

    for(var i = 0; i < datensatz.length; i++)
    {
        for(var j = 0; j < datensatz[i].length; j++)
        {
            if(datensatz[i][j].indexOf(suchbegriff) > -1)
            {
                ergebnisse.push(datensatz[i]);
            }
        }
    }

    if(ergebnisse.length > 0)
    {
        // TODO: Tabelle mit "ergebnisse" statt "datensatz" generieren.
    }
    else
    {
        // TODO: Keine Ergebnisse gefunden, Meldung anzeigen? "datensatz" anzeigen?
    }
}
Die erste Schleife durchläuft deine Datensätze, die zweite dann die einzelnen Felder. Mit indexOf lässt sich feststellen an welchem Punkt in einer Zeichenkette die gesuchte Zeichenkette vorkommt. Wenn es garkeine Übereinstimmung gibt, wird -1 zurückgegeben.

Syntax:
Javascript:
zeichenkette.indexOf(suchbegriff);
"Der braune Bär".indexOf("braun"); // Rückgabe: 4

Push fügt einen neuen Index am Ende des ergebnisse-Arrays ein.

In den Zeilen 25 und 29 musst du jetzt nur noch auf die Suchergebnisse reagieren und zum Beispiel deine neutabelle-Funktion so erweitern, dass sie auch mit dem ergebnisse-Array arbeiten kann. Das wirst du sicher hinbekommen. Bestenfalls löst du das mit Funktionsparametern.
 

Neue Beiträge

Zurück