PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mehrzeiliges textfeld beschränken


Stifler
10.04.2005, 15:34:58
hi,

ist vielleicht eine dumme frage aber ich hab so was bis jetzt noch nicht gebraucht.

ein textfeld kann man ja auf eine bestimmte anzahl zeichen beschränken, nun meine frage ist sowas auch mit einem mehrzeiligen textfeld möglich?

habe auch schon kräftig gegoogelt aber leider nix in der richtung gefunden

xabbuh
10.04.2005, 15:40:37
Wenn du dir mal die Attribut-Referenz (http://de.selfhtml.org/html/referenz/attribute.htm#textarea) für das textarea-Element (http://de.selfhtml.org/html/formulare/eingabe.htm#bereiche) anschaust, siehst du, dass sich die Eingabelänge auf HTML-Basis nicht beschränken lässt. Du könntest hier aber mit JavaScript und/oder PHP arbeiten.

Stifler
10.04.2005, 15:49:23
dachte es gäbe nen kleinen trick denn ich überlesen habe oder so.

hättest du ein beispiel für mich wie das mit javascript und/oder php ausschauen könnte?

xabbuh
10.04.2005, 16:02:11
In PHP kannst du mit der Funktion strlen() die Länge des Textes ermitteln.

In JavaScript hätte ich hier mal ein kleines Beispiel für dich, dass dir die aktuelle Anzahl der Zeichen im Eingabefeld anzeigt:

<script type="text/javascript">
<!--
function ShowLength(text, field)
{
document.getElementById(text).innerHTML = document.getElementById(field).value.length;
}
//-->

<p id="laenge">0</p>
<textarea id="eingabe" onkeydown="ShowLength('laenge', 'eingabe');" onkeyup="ShowLength('laenge', 'eingabe');"></textarea>

Stifler
10.04.2005, 16:35:44
da fällt mir grad was abartig wichtiges ein. ich muß ja net die länge bestimmen, sondern ich muß festlegen wieviele zeilen das eingabefeld enthalten darf.

ich wollte die seite auf maximimal 50 zeilen festlegen, gibt es für zum zeilen zählen auch nen javascript code? und wie sage ich ihm dann das er wenn er die 50 zeile hat keine weitere zeile mehr hinzufügen darf?

xabbuh
10.04.2005, 16:46:13
Du könntest den Text mit split() (http://de.selfhtml.org/javascript/objekte/string.htm#split) am Zeilenumbruch in ein Array aufsplitten und dann die Anzahl der Elemente mit length (http://de.selfhtml.org/javascript/objekte/array.htm#length) die Anzahl der Elemente ermitteln.

Stifler
10.04.2005, 17:00:02
woher weiss ich den ob wie hier die zeile einfach zu ende ist und der curser automatisch in die neue zeile springt

oder wie ich jetzt mit 2mal enter hier hingesprungen bin?

xabbuh
10.04.2005, 17:09:41
Wenn automatisch in die neue Zeile gesprungen wird, bleibt es ja anschließend trotzdem eine Zeile.

Stifler
10.04.2005, 17:19:09
ja schon aber mit enter net. wie checkst du das dann ab?

xabbuh
10.04.2005, 17:26:47
Ich verstehe dein Problem nicht wirklich. Was passt an split("n") denn nicht?

Stifler
10.04.2005, 17:43:57
jetzt blick ich auch grad nix mehr :(

im prinzip muß ich die anzahl der zeichen zählen und die zeilen das nix schief geht. ich weiss wie ich die zeichen zählen kann allerdings weiss ich net wie ich die zeilen zählen kann bzw. diese dann begrenzen (die zeichen und zeilen)

das ist das eigneltiche probelm

xabbuh
10.04.2005, 17:51:36
Anzahl der Zeilen ermitteln:

<script type="text/javascript">
<!--
function CountRows(field)
{
var rows = document.getElementById(field).value.split("n");
return rows.length;
}
//-->
</script>


Anzahl Zeichen:

<script type="text/javascript">
<!--
function NumSigns(field)
{
return document.getElementById(field).value.length;
}
//-->
</script>

Stifler
10.04.2005, 18:19:07
hab es nun genau so eingebaut aber irgendwie muß ich bei meinem textarea nen fehler drin haben :/

er bringt mir dauernd nen syntaxfehler in zeile 25


<script type="text/javascript">
<!--
function CountRows(field)
{
var rows = document.getElementById(field).value.split("n");
return rows.length;
}
//-->
</script>

<script type="text/javascript">
<!--
function NumSigns(field)
{
return = document.getElementById(field).value.length; // zeile 25
}
//-->
</script>

<p id="eingabe">0</p><p>
<TEXTAREA WRAP=PHYSICAL ID="eingabe" NAME="field" ROWS=29 COLS=60
onkeydown="NumSigns('eingabe');CountRows('eingabe');"
onkeyup="NumSigns('eingabe');CountRows('eingabe');"></TEXTAREA></P>

xabbuh
10.04.2005, 19:26:02
"return =" ist natürlich falsch, "return" ist richtig (s. meinen geänderten Beitrag).

Stifler
10.04.2005, 23:26:38
hm das problem in der zeile 25 besteht leider immer noch, hab jetzt aber festgestellt das es an der id bzw an dem namen des textfeldes liegt. aber meine js kenntnisse sind zu gering um das richtig zu deuten :/


selbst wenn ich das feld vor dem textarea verändere wo mir angezeigt wird wieviele zeichen eingegeben wurden, kommt ne fehlermeldung oder auch net.

xabbuh
11.04.2005, 08:38:29
Wie sieht dein Code denn jetzt aus und welche Fehlermeldung erhälst du?

Marilu
11.04.2005, 10:23:55
Die Zeilen kannst Du so zählen:

$zeilen = substr_count($TextFeld, "n");

Begrenzen? Willst Du den Rest abschneiden...?

xabbuh
11.04.2005, 10:33:54
Die Zeilen kannst Du so zählen:

$zeilen = substr_count($TextFeld, "n");
Seit wann gibt es in JavaScript die Funktion substr_count()?

Marilu
11.04.2005, 10:36:57
Seit wann gibt es in JavaScript die Funktion substr_count()?
Sorry, ich meinte hier die php-Funktion substr_count().

Stifler
11.04.2005, 12:45:01
also mein code sieht folgender massen aus


<script type="text/javascript">
<!--
function CountRows(field)
{
var rows = document.getElementById(field).value.split("n");
return rows.length;
}
//-->
</script>

<script type="text/javascript">
<!--
function NumSigns(field)
{
return document.getElementById(field).value.length;
}
//-->
</script>

<TD>
<p id="field">0</p><p>
<TEXTAREA WRAP=PHYSICAL ID="eingabe" name="text" ROWS=29 COLS=60
onkeydown="NumSigns('eingabe'), CountRows('eingabe');"
onkeyup="NumSigns('eingabe'), CountRows('eingabe');"></TEXTAREA></P>
</TD>


allerdings hab ich es jetzt irgendwie hinbekommen das er keinen fehler mehr anzeigt. er zählt mir aber auch nix mit. ich werd aus js einfach net schlau :(

|Coding
11.04.2005, 12:53:01
ich werd aus js einfach net schlau :(
Kein wunder, JS ist einfach nur ekelhaft.

Stifler
11.04.2005, 13:00:00
da hast du recht coding, aber ich hab grad ein script gefunden das mir zumindest die zeichen einschränkt und die eingabe ab 1000 zeichen blockiert. jetzt muß es nur noch irgendwie funktionieren das er mir die zeilen zählt und ab einer bestimmten anzahl blockiert :)

hier mal der code wie es jetzt ausschaut


<SCRIPT language=JavaScript>
<!--
function CheckStr() {
StrLen=window.document.tape.notiz.value.length;
var maxi=1000;
if (StrLen>maxi){
window.document.tape.notiz.value=window.document.tape.notiz.value.subs tring(0,1000);
StrLeft=0;
}
}
// -->
</SCRIPT>

<textarea cols=80 rows=30 name="notiz" onChange=CheckStr(this) onFocus=CheckStr(this) onBlur=CheckStr(this) onKeyDown=CheckStr(this) onKeyUp=CheckStr(this)></textarea>

|Coding
11.04.2005, 13:08:46
Was machst Du eigendlich, wenn ein User mit deaktiviertem JS daher kommt?

Stifler
11.04.2005, 13:10:06
das problem werde ich net haben das es für das intranet gedacht ist und die rechner alle fest eingestellt sind und keiner dran rumfuscheln kann :)

gott sei dank ;)

xabbuh
11.04.2005, 13:46:55
Wie sieht denn jetzt deine Funktion aus, mit der die Anzahl der Zeilen ermittelt wird?

Kein wunder, JS ist einfach nur ekelhaft.
Von der Syntax her ist JavaScript doch nun wirklich einfach zu handhaben.

|Coding
11.04.2005, 14:14:01
Ich meine ja auch nicht die Syntax, sonder JS allgemein.

Stifler
11.04.2005, 14:36:02
die funktion schaut immer noch so aus, allerdings weis ich jetzt net wie ich diese ansprechen soll.


<script type="text/javascript">
<!--
function CountRows(field)
{
var rows = document.getElementById(field).value.split("n");
return rows.length;
}
//-->
</script>

<p>verfügbare Zeichen:<INPUT name=laenge value='Anzahl Zeichen' size=20 readonly></p>
<p>verfügbare Absätze:<INPUT name=hoehe value='Anzahl Absätze' size=20 readonly></p><p>
<textarea cols=80 rows=30 name="notiz" onChange=CheckStr(this) onFocus=CheckStr(this) onBlur=CheckStr(this) onKeyDown=CheckStr(this) onKeyUp=CheckStr(this)></textarea>

xabbuh
11.04.2005, 15:27:04
<script type="text/javascript">
<!--
function CountRows(field)
{
var rows = document.getElementById(field).value.split("n");
if(rows.length >= 10)
alert("Sie haben jetzt mehr als 10 Zeilen geschrieben.");
}
//-->
</script>

<p>verfügbare Zeichen:<INPUT name=laenge value='Anzahl Zeichen' size=20 readonly></p>
<p>verfügbare Absätze:<INPUT name=hoehe value='Anzahl Absätze' size=20 readonly></p><p>
<textarea cols=80 rows=30 name="notiz" id="notiz" onChange="CheckStr(this);CountRows('notiz');" onFocus="CheckStr(this);;CountRows('notiz');" onBlur="CheckStr(this);;CountRows('notiz');" onKeyDown="CheckStr(this);;CountRows('notiz');" onKeyUp="CheckStr(this);;CountRows('notiz');"></textarea>

Stifler
11.04.2005, 15:43:27
ahja alles klar das funzt zusammen mit der zeichenbegrenzung einwandfrei :)

vielen dank xabbuh

|Coding
11.04.2005, 15:43:53
Besser:

...onFocus="CheckStr(this);CountRows('notiz');" onBlur="CheckStr(this);CountRows('notiz');" onKeyDown="CheckStr(this);CountRows('notiz');" onKeyUp="CheckStr(this);CountRows('notiz');"></textarea>

Stifler
11.04.2005, 15:55:32
hatte ich schon gesehn trotzdem danke coding.

xabbuh eine frage noch wie kann ich es ohne das alert feld. machen das er auf enter nach 10 maligen betätigen nicht mehr reagiert, sowie beim zeichen zählen?

xabbuh
11.04.2005, 16:17:32
Besser:

...onFocus="CheckStr(this);CountRows('notiz');" onBlur="CheckStr(this);CountRows('notiz');" onKeyDown="CheckStr(this);CountRows('notiz');" onKeyUp="CheckStr(this);CountRows('notiz');"></textarea>
Irgendwie fällt mir da gerade kein Unterschied auf...

xabbuh eine frage noch wie kann ich es ohne das alert feld. machen das er auf enter nach 10 maligen betätigen nicht mehr reagiert, sowie beim zeichen zählen?


<script type="text/javascript">
<!--
function CountRows(field)
{
var rows = document.getElementById(field).value.split("n");
if(rows.length >= 10) {
while(rows.length >= 10) {
rows.pop();
}
document.getElementById(field).value = rows.join("n");
}
}
//-->
</script>

Stifler
11.04.2005, 16:21:23
war auch nur ein kleiner unterschied du hast zwischen den functionen immer ;; gemacht und coding meinte ;

mit dem neuen script hat er ein problem und zwar bringt er ne meldung nach 10 malligen betätigen das row undefiniert sei

xabbuh
11.04.2005, 16:54:25
war auch nur ein kleiner unterschied du hast zwischen den functionen immer ;; gemacht und coding meinte ;
Achso. :-)

mit dem neuen script hat er ein problem und zwar bringt er ne meldung nach 10 malligen betätigen das row undefiniert sei
In der Bedingung der while-Schleife muss es rows.length statt row.length heißen (habe das in meinem Beitrag geändert.

Stifler
11.04.2005, 16:58:43
immer diese tipfehler von den helfern *g ;)

war en joke net falsch verstehn. dank dir

Stifler
12.04.2005, 16:22:07
kleines problem hat nix mit dem oben direkt zu tun,

dieses fenster hier ist ja auch ein textarea. wie stellt man es an das wenn ich jetzt enter drücke

er denn text dann auch so wie ich ihn jetzt hier sehe ausgebe.

bei mir entfernt er nach dem post die enters und es ist im prinzip alles in einer endlosen zeile :/

sprich dieser text würde bei mir so aussehen:
kleines problem hat nix mit dem oben direkt zu tun, dieses fenster hier ist ja auch ein textarea. wie stellt man es an das wenn ich jetzt enter drücke er denn text dann auch so wie ich ihn jetzt hier sehe ausgebe. bei mir entfernt er nach dem post die enters und es ist im prinzip alles in einer endlosen zeile :/

xabbuh
12.04.2005, 16:27:28
Die Zeilenumbrüche nicht entfernt. In HTML werden Zeilenumbrüche genau wie Leerzeichen interpretiert. Nur <br /> (XHTML) bzw. <br> (HTML) werden auch wie Zeilenumbrüche angezeigt.
Du musst also die Zeilenumbrüche in <br />/<br> umwandeln. Das kannst du in PHP zum Beispiel mit der Funktion nl2br() machen.

Stifler
12.04.2005, 16:42:34
ich hoffe mal ich hab das richtig verstanden, ich schnappe mir den post wert der von seite 2 kommt, also die variable $notiz und lasse sie auf der zielseite seite 3 die funktion durchlaufen.

würde bei mir dann so aussehen


function nl2br($bla) {
$bla = str_replace("rn", "n", $bla);
$bla = str_replace("<br />n", "n", $bla);
return $bla;
} //zeile 65
$notiz = nl2br($notiz);


allerdings bringt er mir ne fehlermeldung die ich net kenne

Fatal error: Cannot redeclare nl2br() in C:apachefriendsxampphtdocshotelhtmlbody_brief.php on line 65

xabbuh
12.04.2005, 18:17:23
Nene, nl2br() ist eine Funktion von PHP:

<?php
print nl2br($_POST['foo']);
?>

Stifler
12.04.2005, 18:20:32
ahso da hab ich das doch glatt falsch verstanden *g merci

xabbuh
13.04.2005, 08:24:49
Deswegen hatte ich die Funktion oben weiter ja auch mit dem Manual verlinkt... ;-)