Inhalt aus Inputfeld nehmen und Text suchen

  • Immer gern, freut mich, dass Du zufrieden bist.

    Hat der Dirigent denn alle Nummern im Kopf? Es würde sich nämlich anbieten, direkt die Liste der Namen zu zeigen und durch Eingabe von zwei oder drei Buchstaben werden dann die passenden Namen angezeigt.

  • Du bringst mich schon wieder auf den nächsten Feature request ;)

    Würde sagen Hälfte, Hälfte.

    Cool wäre natürlich wenn man die Nummer oder den Namen eingibt und es würden vorschlage angezeigt.


    Wo ich auch eine Lösung finden wollte, aber noch nichts gefunden habe ist folgendes.

    Wenn auf Übertragen geklickt wird, kommt eine Bestätigungsseite. Besser wäre natürlich man würde auf der Seite bleiben und der Button würde z.B. auf Reset wechseln und die Felder wieder zurücksetzen, oder die Seite neu laden.

  • Wenn auf Übertragen geklickt wird, kommt eine Bestätigungsseite. Besser wäre natürlich man würde auf der Seite bleiben und der Button würde z.B. auf Reset wechseln und die Felder wieder zurücksetzen, oder die Seite neu laden.

    Käme ein Request mittels Ajax nicht in Frage?

  • Auch das ist recht einfach weil es heute das datalist-Element gibt. Füge dies statt des Eingabefeldes für die Nummer ins HTML ein:

    Code
        <label>Liednamen: <input id="input-liedname" list="datalist-lieder" type="text"></label>
        <datalist id="datalist-lieder">
        </datalist>

    Und dies am Ende des body, vor dem schließenden </body>:

    Edit, ich vergaß, auf Nummer und Liedname kannst Du dann so zugreifen:

    Code
                var json;
                var verein = document.querySelector('input[name="verein"]:checked').value;
                if (verein === "liednummer1") {
                    var liedname = inputLiedname.value;
                    json = [
                                {"text":[74,5,"MUSIKKAPELLE","fonts/bahnschrift20",1]},
                                //{"text":[83,36,nummer1,"fonts/calibrib80",1]},
                                {"text":[95,36,liedname,"fonts/calibrib80",1]},
                                {"text":[48,105,"ORT","fonts/bahnschrift20",1]}

    Über die Anordnung muss man vielleicht noch nachdenken. Müssen da Nummer und Name getrennt sein? Wäre auch kein Problem.

  • Danke für die schnelle Antwort.

    Ist das so richtig?
    Habe das jetzt mal eingefügt, aber wenn ich etwas in das Feld eingebe kommt da nichts, also kein Vorschlag.

    Und zu der anderen Frage. Ja die Ordnung soll so sein. Deswegen getrennt wegen verschiedener Schriftarten.

  • Hm, ich habe gerade deinen Code in meine Testdatei übernommen und da kommen die Vorschläge. Sieh doch mal in der Console nach ob da Fehlermeldungen kommen.


    Nummer und Name kann man auf diese Weise aufteilen:

    Und dann kannst Du Nummer und Name so ermitteln:

    Code
                const splitted = inputLiednamen.value.split(': ');
                let nr1= splitted[0];
                let name1= splitted[1]
  • Fehler gefunden. Ich hatte vergessen eine wichtige Zeile auszuklammern. Fremdschäm...


    Aber das mit der Aufteilung verstehe ich noch nicht so ganz.


    Wie muss jetzt der Bereich mit dem JSON Aufbau aufgebaut sein?

    Und wo muss der Bereich hin?

    Zitat

    Und dann kannst Du Nummer und Name so ermitteln:

    Code

    Code
                const splitted = inputLiednamen.value.split(': ');            let nr1= splitted[0];            let name1= splitted[1]
  • Ok ich habs hingebracht.


    Aber was muss ich jetzt machen um das ganze auch für das zweite Liedstück hinzubekommen?


  • Guten Morgen!

    So wie Du zuvor zwei Eingabefelder gebraucht hast, wirst Du jetzt zwei Auswahllisten brauchen. Ich dachte erst, wir müssten auch die Liste verdoppeln aber das ist gar nicht nötig, die beiden können die selbe datalist verwenden:

    Code
        <label>Lied 1: <input id="input-liedname-1" list="datalist-lieder" type="text"></label>
        <label>Lied 2: <input id="input-liedname-2" list="datalist-lieder" type="text"></label>
        <datalist id="datalist-lieder">
        </datalist>

    Die Generierung mit der for-of-Schleife bleibt dann wie sie ist.

    Und die Werte kannst Du dann so heraus holen:

    Zunächst eine Funktion definieren:

    Code
            function liedHolen(sel) {
                inputLied = document.querySelector(sel);
                const splitted = inputLied ? inputLied.value.split(': ') : ['', ''];
                return { nr: splitted[0], name: splitted[1] };
            }

    Und dann damit die Werte holen:

  • Was dieses betrifft:

    Zitat

    Wo ich auch eine Lösung finden wollte, aber noch nichts gefunden habe ist folgendes.

    Wenn auf Übertragen geklickt wird, kommt eine Bestätigungsseite. Besser wäre natürlich man würde auf der Seite bleiben und der Button würde z.B. auf Reset wechseln und die Felder wieder zurücksetzen, oder die Seite neu laden.

    Wo liegt denn diese HTML-Seite? Du kannst sie ja selbst ändern. Wird sie dann auf den ESP hoch geladen oder bleibt sie lokal und Du öffnest sie irgend wie durch Doppelklick o. ä.?

  • Also irgendwie funzt es nicht


    Das hier gehört:

    Code
            function liedHolen(sel) {
                inputLied = document.querySelector(sel);
                const splitted = inputLied ? inputLied.value.split(': ') : ['', ''];
                return { nr: splitted[0], name: splitted[1] };
            }

    for dem Abschließenden Body in die Script Sektion? Richtig?


    Also:



    Aber ich denke hier ist auf jeden Fall ein Problem

    oder?



    Nochmal vielen Dank für deine geduldige Hilfe :) Parallel lese ich mich in deine genannten Funktion etc. ein. Ist aber doch ganz schön viel Input auf einmal. Wenn es aber mal funktionsfähig ist, macht es beim mir immer klick.


    Lass uns mal das zum laufen bringen. Dann schauen wir mal wegen der Buttonfunktion aus Post #31

  • So geschafft, was eine eckige Klammer zuviel so ausmacht....


    Jetzt zu der nächsten Frage. Kann man das Eingabefeld so beschränken das nur der Wertevorrat möglich ist? Aktuell kann ich ja alles eingeben, was dann ja zu einer nicht verarbeitbaren JSON führt.

  • Jetzt verstehe ich, was Du mit Wertevorrat meintest. Das ist nicht ganz so einfach wie es zunächst scheint weil man ja nicht einfach die Eingaben des Benutzers unterbinden kann. Man müsste abwarten bis er das JSON abschickt und es dann blockieren mit einem geeigneten Hinweis.

    Versuche dies, zunächst einen Button für das Abschicken des JSON:

    Code
        <button type="button" id="send-it">Abschicken</button>

    Und dann dies Javascript:

    Es fügt eine Klasse "invalid" hinzu wenn die Eingabe ungültig ist. Damit können wir die Darstellung des Eingabefeldes mit CSS ändern, z. B. so:

    Code
            input.invalid {
                color: red;
            }

    Wird bei ungültiger Eingabe der Button gedrückt, bekommt der Benutzer einen Hinweis.

  • PS: Man kann auch auf die browsereigene Validierung aufbauen, das würde dann so aussehen:

    Im CSS müssen wir uns dann auf die Pseudoklasse beziehen:

    Code
            input:invalid {
                color: red;
            }
  • Hallo (sorry war unterwegs),

    habe das jetzt wie im #34 umgesetzt. Funktioniert (wobei keine Fehlermeldung kommt wenn gar keine Eingabe gemacht wurde).


    Anschließend habe ich das ganze einfach mal in den bestehenden Button eingesetzt.

    Code
    <input style="height: 40px; width: 100px;" id="send-it" type="button" value="Übertragen" onclick="jsonupload();"><br><br>

    Die Prüfung funktioniert hier auch, aber natürlich wird der josonupload trotzdem durchgeführt (Hatte ich auch so erwartet). Wie könnte man das verhindern, wie müsste das ganze aussehen?


    Vielleicht wäre hier auch der passende Zeitpunkt das Thema zu betrachten, das nach dem Klick ich nicht auf eine Bestätigungsseite geleitet werde, sonder auf der Seite bleibe.

    Im Post #31 hattest du ja schon gefragt. Also die Eingabe .html öffne ich einfach über EspIP-Adresse/steuerung.html (Name der von mir hinterlegten .html)

    Die Bestätigungseite ist aber in dem Projekt hartvercoded, da komme ich also nicht ran. Im Post #23 wurde AJAX vorgeschlagen?!

  • Hier jetzt das Javascript für die Überprüfung ob alles OK ist und das Abschicken mit fetch. Ungetestet, wenn es nicht gleich läuft, versuche selbst, den Fehler zu finden.

  • Habe jetzt das mit dem Fetch hinbekommen (Keine Weiterleitung mehr)

    Das läuft jetzt auf jeden Fall, musste den Code folgendermaßen anpassen:


    Leider funktioniert aber die Prüfung nicht ob etwas eingetragen ist oder nicht. Es springt nicht in die Else Schleife obwohl das Feld leer ist.

    Steht vermutlich im Zusammenhang weil ich das Script aus #34 ist nicht mehr implementiert habe (Prüfung ob die Eingabe zum Wertevorrat passt), weil sonst ein abschicken auch nicht mehr möglich ist. Wahrscheinlich muss das auch in dieses Stück Code von Post #39 hinein? Keine Ahnung.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!