Javascript und wrap=physical
stefansvw
- javascript
Hallo zusammen,
ich habe in meiner Textarea schaut so aus.
<textarea name='msg' maxlength='500' onKeyUp='CheckStr(this)' onKeyDown='CheckStr(this)' STYLE='overflow:hidden' cols='50' rows='10' wrap='physical'>Text bitte eingeben</textarea>";
Und dieser Bereich soll als Druckvorlage dienen also cols=50 und rows=10 und maxlength=500.
Habe nun ein Script geschrieben, welches das eigentlich händeln soll.
function CheckStr(userInput)
{
String.prototype.rtrim = function (clist) {
if (clist)
return this.replace (new RegExp ('[' + clist + ']+$'), '');
return this.replace (/\s+$/, '');
}
var StrLen = window.document.pruef.msg.value.length;
var zeilen = window.document.pruef.msg.rows;
var spalten = window.document.pruef.msg.cols;
var s = window.document.pruef.msg.value;
var z = "";
var a = "";
if (StrLen > 500 ) {
window.document.pruef.msg.value = window.document.pruef.msg.value.substring(0,497) + "...";
alert("Sie haben die maximale Länge von 500 Zeichen überschritten. Ihr Eingabe wurde auf 500 Zeichen gekürzt" );
window.document.pruef.msg.value += window.document.pruef.msg.value.substring(0,50) + "\n";
a = window.document.pruef.msg.value.split("\n");
if(a.length > zeilen) {
alert("Im Druckbereich können nur "+ zeilen +" Zeilen angezeigt werden");
for(var i = 0; i < zeilen-1; i++)
z += a[i]+ "\n";
z += a[i];
window.document.pruef.msg.value = z.rtrim();
}
StrLeft = 0;
}
else {
StrLeft = 500 - StrLen;
a = window.document.pruef.msg.value.split("\n");
if(a.length > zeilen) {
alert("Im Druckbereich können nur "+ zeilen +" Zeilen angezeigt werden");
for(var i = 0; i < zeilen-1; i++)
z += a[i]+ "\n";
z += a[i];
window.document.pruef.msg.value = z.rtrim();
}
}
}
wenn ich 10 Zeilen per Enter eingebe funktioniert es. Gebe ich aber einen String ein der über z.B. 3 Zeilen geht, erkennt er es trotz wrap=Physical nicht als \n also Zeilenumbruch. Wie könnte ich hier einen Zeilenumbruch erzwingen? Also das es wirklich nicht über 10 Zeilen raus geht.
Gruß
Stefan
Moin!
ich habe in meiner Textarea schaut so aus.
<textarea name='msg' maxlength='500' onKeyUp='CheckStr(this)' onKeyDown='CheckStr(this)' STYLE='overflow:hidden' cols='50' rows='10' wrap='physical'>Text bitte eingeben</textarea>";
Es gibt kein Attribut maxlength für die Textarea im HTML-Standard.
Es gibt kein Attribut wrap für die Textarea im HTML-Standard. Vereinzelte Browser berücksichtigen es zwar beim Absenden, das hilft dir aber mit Javascript auch nicht weiter.
Und dieser Bereich soll als Druckvorlage dienen also cols=50 und rows=10 und maxlength=500.
Du mußt zwingend eine eigene Textumbruch-Routine implementieren. Entferne das wrap-Attribut. Erwarte nur manuell eingetippte Zeilenumbrüche. Erwarte mehr als 500 Zeichen. Erwarte mehr als 50 Zeichen pro Zeile. Erwarte mehr als 10 Zeilen.
Und dasselbe dann nochmal auf dem Server.
- Sven Rautenberg
Hallo Sven,
erst einmal Danke für Deine Antwort.
Du mußt zwingend eine eigene Textumbruch-Routine implementieren. Entferne das wrap-Attribut. Erwarte nur manuell eingetippte Zeilenumbrüche. Erwarte mehr als 500 Zeichen. Erwarte mehr als 50 Zeichen pro Zeile. Erwarte mehr als 10 Zeilen.
Na nicht ganz so einfach. Ich kann z.B. keine Zeilenumbrüche vom Benutzer erzwingen bzw. mehr als 500 Zeichen etc.
ich dachte ich könnte aber hiermit erzwingen hinter jedem 50 zeichen ein Zeilenumbruch einzubinden. Hatte das wrap etc. auch schon vor ein paar Tagen entfernt.
window.document.pruef.msg.value += window.document.pruef.msg.value.substring(0,50) + "\n";
es klappt nicht so ganz :-(
Gruß
Stefan
Moin!
Du mußt zwingend eine eigene Textumbruch-Routine implementieren. Entferne das wrap-Attribut. Erwarte nur manuell eingetippte Zeilenumbrüche. Erwarte mehr als 500 Zeichen. Erwarte mehr als 50 Zeichen pro Zeile. Erwarte mehr als 10 Zeilen.
Na nicht ganz so einfach. Ich kann z.B. keine Zeilenumbrüche vom Benutzer erzwingen bzw. mehr als 500 Zeichen etc.
Du kriegst vom Benutzer einen Textstring, den du "passend" formatieren kannst. Du kannst auf die harte Tour jeweils nach 50 Zeichen einen Zeilenumbruch einfügen. Das trennt an dieser Stelle vorhandene Worte unschön in zwei Teile.
Du kannst gucken, ob an der potentiellen Trennstelle ein Wort steht, und den einzufügenden Zeilenumbruch weiter nach vorne verlagern zum vorhergehenden Leerzeichen. Das hilft dir bei Zeilen, die nicht aus einem einzigen Wort mit mehr als 50 Zeichen bestehen.
Du kannst natürlich auch einfach dem Benutzer eine breitere Textarea geben und ihn zwingen, manuell jede Zeile nicht länger als 50 Zeichen zu machen, indem du einfach nur prüfst und ggf. anmeckerst, wenn Zeilen länger als 50 Zeichen sind.
ich dachte ich könnte aber hiermit erzwingen hinter jedem 50 zeichen ein Zeilenumbruch einzubinden. Hatte das wrap etc. auch schon vor ein paar Tagen entfernt.
"Erzwingen" ist immer so eine Sache.
- Sven Rautenberg
Hallo stefansvw,
Und dieser Bereich soll als Druckvorlage dienen also cols=50 und rows=10 und maxlength=500.
wenn du nicht vorhast, den Text mit fester Buchstabenbreite auszudrucken - das sieht dann so aus, wie hier im Forum -, solltest du dir auch noch Gedanken darüber machen, dass ein "M" deutlich mehr Platz benötigt, als ein "i"
Gruß, Jürgen