Hast Du dir jPlayer schon angesehen?
http://jplayer.org/latest/demos/
Edit: Ich sehe gerade, der ist von Haus aus nicht responsive, aber es gibt anscheinend Wege, das nachzurüsten:
http://stackoverflow.com/quest…e-audio-player-responsive
Beiträge von Sempervivum
-
-
Dazu musste ich das Ganze etwas umstrukturieren. Ich habe auch den roten Rahmen für das zweite Eingabefeld hinzu gefügt.
Code
Alles anzeigen<script> function toAm(str) { return str.replace(/\./g, "").replace(",", "."); } function multiply() { var val1 = document.getElementById("isk").value; var val2 = document.getElementById("fracht-msg").value; if (val1 != "" && val2 != "") { var val1 = toAm(val1); document.getElementById("endergebnis").value = formatNr(val1 * val2); } } function formatNr(nr) { str = nr.toString().replace(".", ","); var pos = str.indexOf(","); if (pos == -1) pos = str.length; var result = "", i = 0; do { result += str[i]; i++; if (((pos - i) % 3) == 0) result += "." } while (i < pos - 1) for (; i < str.length; i++) result += str[i]; return result; } function inputFracht(val) { var msgAbove = "Zu Groß"; var msgBelow = "Perfekt"; var limit = 300000; val = (toAm(val) * 500).toFixed(2); document.getElementById("isk").value = formatNr(val); var msgfield = document.getElementById("zuzahlen"); if (val > limit) msgfield.innerHTML = msgAbove; else msgfield.innerHTML = msgBelow; multiply(); } function inputFracht2(inp) { var msgBelow = "1000"; limit1 = 1000000000; var msgLimit1 = "200000"; limit2 = 2000000000; var msgLimit2 = "500000"; var val = inp.value.replace(",", "."); var val2 = document.getElementById("") var outp = document.getElementById("fracht-msg"); if (val >= limit2) outp.innerHTML = msgLimit2; else if (val >= limit1) outp.innerHTML = msgLimit1; else outp.innerHTML = msgBelow; multiply(); } </script> <form> Frachtgroesse<br> <input type="text" id="fracht" pattern="[1-9][0-9]*(,[0-9]+)?" oninput="inputFracht(this.value);"><br> <input type="reset" value="Löschen" /> <br> Isk zu zahlen:<br> <output id="isk"></output> <output id="zuzahlen"></output> Fracht: <input type="text" id="fracht2" pattern="[1-9][0-9]*(,[0-9]+)?" oninput="inputFracht2(this);"> <output id="fracht-msg"></output><br> <output id="endergebnis"></output> </form> <style> #fracht:invalid, #fracht2:invalid { border: 2px solid red; } </style>
-
Ja, <style> und </style> sind HTML-Tags. Man braucht sie nur, wenn man CSS in einer HTML-Datei einbettet. In einer CSS-Datei dürfen nur CSS-Anweisungen (und Kommentare) stehen.
Wenn es bei dir trotzdem nicht funktioniert, solltest Du überprüfen, ob Pfad und Dateiname stimmen. -
Fehler gefunden. Dieses:
löscht nur den ersten Punkt, so dass ein String mit mehreren Punkten übrig bleibt. Das ist dann kein gültiges Format für eine Zahl und es ergibt NaN.
So ist es richtig: -
Poste mal die Eingaben, die zum NaN führen.
-
-
PS: Kopieren in die Zwischenablage sollte kein Problem sein:
https://clipboardjs.com/ -
Habe jetzt mal die Berechnungen, so wie ich dich verstanden habe, eingebaut. Langsam verliert man den Überblick bei den vielen Eingabefeldern. Ich empfehle, das zu überarbeiten und aussagefähige Texte für die Beschriftungen und IDs zu verwenden. Die Formatierungen mit Punkt und Komma muss ich dann noch Mal überarbeiten.
Code
Alles anzeigen<script><script> function multiply() { var val1 = document.getElementById("isk").value; var val2 = document.getElementById("fracht-msg").value; if (val1 != "" && val2 != "") { var val1 = val1.replace(".", "").replace(",", "."); document.getElementById("output3").innerHTML = val1 * val2; } } function convert(val) { var msgAbove = "Zu Groß"; var msgBelow = "Perfekt"; var limit = 5000; val = (val.replace(",", ".") * 500).toFixed(2); var msgfield = document.getElementById("zuzahlen"); if (val > limit) msgfield.innerHTML = msgAbove; else msgfield.innerHTML = msgBelow; str = val.toString().replace(".", ","); var pos = str.indexOf(","); var result = "", i = 0; do { result += str[i]; i++; if (((pos - i) % 3) == 0) result += "." } while (i < pos - 1) for (; i < str.length; i++) result += str[i]; multiply(); return result; } function inputFracht(inp) { var msgBelow = "10"; limit1 = 200; var msgLimit1 = "20"; limit2 = 500; var msgLimit2 = "50"; var val = inp.value.replace(",", "."); var val2 = document.getElementById("") var outp = document.getElementById("fracht-msg"); if (val >= limit2) outp.innerHTML = msgLimit2; else if (val >= limit1) outp.innerHTML = msgLimit1; else outp.innerHTML = msgBelow; multiply(); } </script> <form> Frachtgroesse<br> <input type="text" id="fracht" pattern="[1-9][0-9]*(,[0-9]+)?" oninput="isk.value = convert(fracht.value);"><br> <input type="reset" value="Löschen" /> <br> Isk zu zahlen:<br> <output id="isk"></output> <output id="zuzahlen"></output> Fracht: <input type="text" id="fracht2" pattern="[1-9][0-9]*(,[0-9]+)?" oninput="inputFracht(this);"> <output id="fracht-msg"></output><br> <output id="output3"></output> </form>
-
So ist es richtig mit den Code-Tags.
Sie dir noch mal meinen Post Nr. 17 an, dort wird die Funktion inputFracht() definiert und dies musst Du in dein Javascript übernehmen:HTML
Alles anzeigen<!DOCTYPE HTML><html> <head> <title>Untitled</title> </head> <body> <script> function convert(val) { var msgAbove = "Zu Groß"; var msgBelow = "Perfekt"; var limit = 150000000; val = (val.replace(",", ".") * 500).toFixed(2); var msgfield = document.getElementById("zuzahlen"); if (val > limit) msgfield.innerHTML = msgAbove; else msgfield.innerHTML = msgBelow; str = val.toString().replace(".", ","); var pos = str.indexOf(","); var result = "", i = 0; do { result += str[i]; i++; if (((pos - i) % 3) == 0) result += "." } while (i < pos - 1) for (; i < str.length; i++) result += str[i]; return result; } function inputFracht(inp) { var msgBelow = "Nachricht fuer unterhalb Limit1"; limit1 = 200; var msgLimit1 = "Nachricht fuer oberhalb Limit1"; limit2 = 500; var msgLimit2 = "Nachricht fuer oberhalb Limit2"; var val = inp.value.replace(",", "."); var outp = document.getElementById("fracht-msg"); if (val >= limit2) outp.innerHTML = msgLimit2; else if (val >= limit1) outp.innerHTML = msgLimit1; else outp.innerHTML = msgBelow; } </script> <form oninput="isk.value = convert(fracht.value);"> Frachtgroesse<br> <input type="text" id="fracht" pattern="[1-9][0-9]*(,[0-9]+)?"><br> <input type="reset" value="Löschen" /> <br> Isk zu zahlen:<br> <output id="isk"></output> <output id="zuzahlen"></output> </form> <style> #fracht:invalid { border: 2px solid red; } </style> <input type="text" id="fracht" pattern="[1-9][0-9]*(,[0-9]+)?" oninput="inputFracht(this);"> <output id="fracht-msg"></output> </body> </html>
-
Dein Fehler ist offenbar, dass Du die Funktion inputFracht nicht in das Javascript übernommen hast.
Wenn Du Code postest, solltest Du die Code-Buttons in der Werkzeugleiste oberhalb des Eingabefeldes für eine Antwort verwenden: #, <?, SQL, CSS, <>, JS.
In deinem letzten Posting wurde dasals BB-Code für Italic interpretiert und verschluckt - etwas, das häufig vorkommt, wenn keine Code-Tags verwendet werden.
-
Soll das jetzt die frühere Abfrage nach dem Wert und die Ausgabe von Meldungen ersetzen?
HTMLFracht: <input type="text" id="fracht" pattern="[1-9][0-9]*(,[0-9]+)?" oninput="inputFracht(this);"> <output id="fracht-msg"></output>
JavaScript
Alles anzeigenfunction inputFracht(inp) { var msgBelow = "Nachricht fuer unterhalb Limit1"; limit1 = 200; var msgLimit1 = "Nachricht fuer oberhalb Limit1"; limit2 = 500; var msgLimit2 = "Nachricht fuer oberhalb Limit2"; var val = inp.value.replace(",", "."); var outp = document.getElementById("fracht-msg"); if (val >= limit2) outp.innerHTML = msgLimit2; else if (val >= limit1) outp.innerHTML = msgLimit1; else outp.innerHTML = msgBelow; }
Wenn es noch mehr Abstufungen für die Werte geben soll, müsste man das besser auf ein Array umstellen.
Das Forum verschluckt z. T. die Zeilenumbrüche. Scrolle im HTML nach rechts. -
Was meinst Du mit "unterem Feld"? Das Feld, in dem die Zahl eingegeben wird, bzw. der Wert vor der Multiplikation?
-
Habe es jetzt mal so implementiert, wie ich es verstanden habe. Außerdem habe ich für das Eingabefeld eine saubere Validierung eingebaut. Prüfe mal, ob es das ist, was Du dir vorgestellt hast.
Code
Alles anzeigen<script> function convert(val) { var msgAbove = "Zu zahlen: xxx Euro"; var msgBelow = "Zu zahlen: yyy Euro"; var limit = 5000; val = (val.replace(",", ".") * 500).toFixed(2); var msgfield = document.getElementById("zuzahlen"); if (val > limit) msgfield.innerHTML = msgAbove; else msgfield.innerHTML = msgBelow; str = val.toString().replace(".", ","); var pos = str.indexOf(","); var result = "", i = 0; do { result += str[i]; i++; if (((pos - i) % 3) == 0) result += "." } while (i < pos - 1) for (; i < str.length; i++) result += str[i]; return result; } </script> <form oninput="isk.value = convert(fracht.value);"> Frachtgroesse<br> <input type="text" id="fracht" pattern="[1-9][0-9]*(,[0-9]+)?"><br> <input type="reset" value="Löschen" /> <br> Isk zu zahlen:<br> <output id="isk"></output> <output id="zuzahlen"></output> </form> <style> #fracht:invalid { border: 2px solid red; } </style>
-
Zitat
wenns net passt kommt da irgendwie NaN
Kannst Du näher beschreiben, was man tun muss, um das zu reproduzieren?
Edit: Ich glaube, ich weiß jetzt, was Du meinst: Wenn ein Zeichen, z. B. ein Buchstabe, eingegeben wird, so dass die Eingabe keine Zahl ergibt.
-
Zitat
Wo gebe ich denn ein ab Welchen Wert er Meldung X generiert? bzw kann ich das auch schon so machen das er bereits in der Eingabe meckert?
Das verstehe ich nicht ganz: Was meinst Du mit "Meldung X"? Möchtest Du die Eingabe überprüfen, d. h. testen, ob das Format stimmt (nur Ziffern und ein Komma)?
-
- Dein CSS ist nicht wirksam, weil Du den divs IDs gegeben hast, im CSS jedoch Klassen verwendest.
- divs sind Blockelemente und nehmen jeweils eine neue Zeile ein. Du musst entweder floaten oder "display:inline-block" verwenden.
- Weil zwischen dem schließenden Tag des ersten divs und dem öffnenden des zweiten Zeilenumbrüche sind, wird dazwischen ein Leerraum eingefügt.
So funktioniert es: -
PS: Ich sehe gerade, dass Du deinen bisherigen Code ja schon in deinem Eingangsposting gepostet hast. Du müsstest diesen folgender Maßen erweitern:
HTML
Alles anzeigen<!DOCTYPE HTML> <html> <head> <title>Untitled</title> <script> function convert(val) { str = val.toString().replace(",", "."); str = parseFloat(str).toFixed(2); var pos = str.indexOf("."); str = str.replace(".", ",") var result = "", i = 0; do { result += str[i]; i++; if (((pos - i) % 3) == 0) result += "." } while (i < pos - 1) for (; i < str.length; i++) result += str[i]; return result; } </script></head> <body> <form oninput="isk.value = convert(fracht.value * 500);"> Frachtgroesse<br> <input type="text" id="fracht"><br> <input type="reset" value="Löschen" /> <br> Isk zu zahlen:<br> <output id="isk" name="isk"></output> </form> </body> </html>
Wenn Du die Ausgabe in deutschem Format machst, wäre es vielleicht angebracht auch die Eingabe mit Komma zu ermöglichen.
-
Du öffnest zwar mit "<?php" einen Abschnitt mit PHP-Code, schließt ihn aber nicht ab.
Das Skript, das ich gepostet hatte, ist Javascript, kein PHP. Du kannst dieses nicht einfach in einen Abschnitt mit PHP einfügen.
Du hast mein Skript unverändert eingefügt. Du musst jedoch den Aufruf der Funktion convert() in dein Javascript integrieren.
Wenn ich das richtig sehe, brauchst Du überhaupt kein PHP für das, was Du vor hast.Am besten postest Du mal deinen kompletten Code, bevor Du mein Skript eingefügt hast. HTML und Javascript mit dieser Berechnung.
-
So können wir dir leider nicht helfen, weil wir nur die Fehlermeldung aber nicht den PHP-Code sehen. Kannst Du diesen posten, bis in die Gegend wo der Fehler gemeldet wird?
-
Nein, das hat mit PHP wirklich nichts zu tun. Versuche dieses:
Code
Alles anzeigen<script>var test = "500000,777"; var test2 = "2000.777"; function convert(str) { str = str.replace(",", "."); str = parseFloat(str).toFixed(2); var pos = str.indexOf("."); str = str.replace(".", ",") var result = ""; var i = 0; do { result += str[i]; i++; if (((pos - i) % 3) == 0) result += "." } while (i < pos - 1) for (; i < str.length; i++) result += str[i]; return result; } console.log(convert(test));console.log(convert(test2));</script>