Zum Inhalt springen

<textarea> begrenzen


Orgi

Empfohlene Beiträge

So folgendes, ich habe ein Formular über das eine Eingabe in meine Datenbank erfolgt. Der Wert der Textareas darf nur eine bestimmte Größe erreichen sonst sprengen sie das Ausgabedesign. Die Begrenzung soll ziemlich simpel erfolgen, nämlich nur soviel wie man sieht von der Textarea. Ich bräuchte das ganze in PHP oder Javascript (wohl eher Javascript kann mir da mit PHP nix vorstellen).

Mit Javascript kenn ich mich weiter nicht aus deshalb frag ich hier. Im Netz hab ich nur Beispiele gefunden wo die Zeichenmenge geprüft wurde.

Nur wenn jemand zum Bsp. alle 10 Zeichen eine Zeile weiter springt, kommt er zum Ende des dargestellten Bereichs bevor diese Zeichenanzahl erreicht ist, und die Textarea wird erweitert.

Es müsste also abgeprüft werden wieviel Zeilen oder so. Kann mir da jemand weiterhelfen oder mir nen paar hilfreiche Links geben?

THX!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

mit JavaScript geht das doch recht simpel.

Mit textareaname.value.length kannste die Länge des Textes ermitteln und dann brauchste ja nur noch mit onchange oder so darauf reagieren und prüfen ob die Länge noch erlaubt ist.

Oder Du prüfst vor Absenden des Formulars ob die Länge in Ordnung ist.

Aber ob man die Anzahl der Zeilen überprüfen kann, bin ich mir jetzt nicht sicher.

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

[edit]

Aber ob man die Anzahl der Zeilen überprüfen kann, bin ich mir jetzt nicht sicher.

du kannst nach \n suchen, die geben in nem textarea n Zeilenumbruch an

[/edit]

OMG

Hey, guck mal:

I W

was fällt dir da auf? unterschiedlich viel Platz wird benötigt ;)

Wenn du wirklich sowas machen willst musst du jedem möglichem Zeichen einen "Platzwert" zuwesen, gucken wieviel Platz insgesamt vorhanden ist und bei jedem getippten Zeichen den jeweiligen Platzwert hinzuzählen, bis der maximale erreicht wird.

Am besten denk ich, eigenen sich die Pixel, die ein Buchstabe benötigt (space nicht vergessen)

Als zB I hat (fiktiv) 3 Pixel, das W ist sehr breit, hat (fiktiv) 15 Pixel

Ausrechnen wieviele Pixel passen, zB mal 20.

Drückst du I hast du 20 - 3 = 17

nochmal I ist 17 - 3

usw. überprüfen ob der Wert negativ ist, ansonsten das Zeichen wieder entfernen und nachricht ausgeben das der Platz voll ist.

Neben dessen noch überprüfen ob du \n (new Line) drin hast, berücksichtigen das Backspace gedrückt werden kann (Restplatz wird erhöht) usw.

Und zudem solltest du das ganze auch Serverseitig abfragen, da ich bei mir ja Javascript deaktivieren kann.

Also ich persönlich würde dir vorschlagen, schau wieoft ein M reinpasst und begrenze lediglich die maximale Zeichenlänge auf diese Anzahl.

Ggf. nimm anstelle eines M ein W, kein text wird jemals länger sein als wenn er komplett aus Ws besteht ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmm ich dachte es wär irgendwie möglich das Ende der sichtbaren Textarea oder das Ende der so und so vielten Zeile zu prüfen. Der Benutzer soll innerhalb der sichtbaren Textarea die Infos so gestalten können wie er will, denn so werden sie auch später ausgegeben.

Die Zeilenumbrüche zu zählen wär ne Möglichkeit, aber dann müsst ich am Ende zusätzlich noch die Anzahl der Zeichen zählen bevor automatisch umgebrochen wird. Leider reicht da nich mein Wissen was Javascript angeht :( .

Link zu diesem Kommentar
Auf anderen Seiten teilen

auf selfhtml.org hab ich jetzt auf die schnelle nix dazu gesehen, aber es scheint kein maxlength Attribut fürs <textarea> zu geben, richtig?

ok, also, du kannst... arg.... das is echt kniffelig...

du kannst entweder n <textarea> nehmen und einfach über JS/PHP die maximale anzhal der ziechen festlegen

desweiteren scannst du nach \n die, wie gesagt, einen Zeilenumbruch darstellen.

Wenn du nun zB nur 10 Zeilen maximal erlaubst machst du im PHP-Skript something like that:


$text = substr($_POSt['text'],0,500); # beginne ab Zeichen 0 | 500 is das maxim an Zeichen
$zeilen = explode("\n",$text,11); #Zerteile an "\n" maximal 11 mal | 10 Zeilen maximal, 11te Zeile hat den gesamten rest
array_pop($zeilen); # das letzte element (11te zeile) wird aus dem array genommen
$kompletter_text = ""; # leeren string anlegen bzw. wenn vorhanden leeren
for($i=0;$i<10;$i++){ #for-schleife | 10 durchläufe
$kompletter_text .= $zeilen[$i];
}
[/php]

Die überprüfung der Zeilenanzahl kannst auch mit JS machen, weiß aber nicht ob du mit JS da auch nach dem \n suchen musst oder ob das dann anders gehandhabt wird.

ein imho ekliger workaround wäre:

für jede zeile ein ein input-text mit maxlenght:

[code]<input type="text" name="text[0] maxlength="10"><br> <input type="text" name="text[1] maxlength="10"><br> <input type="text" name="text[2] maxlength="10"><br> <input type="text" name="text[3] maxlength="10"><br>[/code]

im post hast du dann $_POST['text'] was ein array darstellt, $_POST['text'][1] wäre die zweite Zeile

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja das hab ich mir dann irgendwann auch gedacht das es kniffelig ist :D . Aber das Ganze muss ja irgendwie gehen, kann mir nicht vorstellen das es nicht schon etliche Male ähnliche Szenarios gab.

Dank dir auf jedenfall schonmal, der Ansatz ist ganz gut, werd ma schaun ob ich das umsetzen kann.

Ne andere Überlegung die ich grad hatte:

Wenn man nach nem Zeilenumbruch die Leerzeichen als Zeichen zählen könnt, dann würde es ja mit ner maximalen Zeichenanzahl gehen. Geht das mit Javascript? Bin mir da grad garnich sicher wie sich das verhält. Dann könnt man einfach ausmessen wieviel reinpasst (mit dem W). aber ich glaub nach nem Zeilenumbruch is immer Ende was?

Link zu diesem Kommentar
Auf anderen Seiten teilen

ähm... ok, dein gedanke ist etwas schwer zu verstehen, aber ich versuchs mal mit meinen worten wiederzugeben, ob ichs begriffen hab:

wenn man einen zeilenumbruch macht, rechnet man die verbrauchten Pixel aus und berechnet daraus dann, viele leere pixel noch für die zeile vorhanden sind.

diese anzahl geteilt durch den pixelverbrauch eines spaces ist dann die anzahl der "nicht-vorhandenen-aber-trozdem-mal-so-tun-als-ob" spaces :D

diese anzahl an fitiven-spaces werden mit zur anzahl an zeichen gerechnet.

ja, so meintest dus doch, oder?

das geht sicher. in einzelschritten ausgedrückt würde ich mir folgendes überlegen (unter berücksichtigung das man es in JS machen kann)

- Ausrechnen, wieviele Pixel pro Zeile

- Zuweißung der verbrauchten PIxel für jedes mögliche Zeichen das eingegeben wird (das wird ne Sch... blöde Arbeit)

- Zeichen wurde eingegeben, Pixelwert abziehen und max. Zeichen -1

/- Ist das Zeichen ein Backspace/Entf -> welches zeichen war vorher da? Pixelwert wieder auf vorhandene platz hinzurechnen (!?Wie merk ich mir die Zeichen?!)

/- ist das Zeichen ein \n -> Berechne verbrauchten Platz der Zeile, maximalplatz - verbruachterplatz = restplatz, restplatz/spaceplatz = fiktive spaces -> max.Zeichen - fiktive spaces

Im bezug auf (!?Wie merk ich mir die Zeichen?!):

Einen Stack erstellen der den eingegebenen Text parallel mitführt und der bei eingabe eines Backspace/Entf den letzten wert popt (zurückliefert und vom stack löscht) aber wie sowas in JS funktioniert... boa sorry, dafür kann ich das nich gut genug...

Also ich stells mir sehr schwer vor, wenns überhaupt machbar ist, aber das muss dir jemand anderes sagen, das weiß ich nicht, sry.

Aber mir kommt grad vom ganzen JS gerede ne andere Idee:

Java-Applet.

Ich kenn da n Forum, da hat man die Möglichkeit, anstelle eines solchen Textfeldes wie auch hier auf FI.de ein Java-Applet zu verwenden.

Hat gleich wysiwyg und ich verwette meinen Popo drauf, das man da auch die maximalen Zeichen und Zeilen festlegen kann ;)

Laut Signatur ist das Applet von WoltLab, aber auf der homepage steht nix drüber.... hmm... wird wohl teil vom wbb sein :/

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...