Hallo,
<script type="text/javascript" >
function checkLength(about){
if (about.value.length>2000) {
about.value = about.value.substring(0,2000)
}
}
</script>
diese Funktion gibt keinen Wert zurück; weiter unten, wo du die Funktion aufrufst, verwendest du aber den undefinierten Rückgabewert:
> `<textarea name="about" cols="70" rows="15" id="input_about" onkeyup="return checkLength(this)" onkeypress="return checkLength(this)" style="display:none">${model.about}</textarea>`{:.language-html}
> Leider habe ich dabei folgendes Problem:
> Der Text wird in eine Datenbank gespeichert. Die erlaubt für die Spalte About nur 2000 Zeichen.
> Die Begrenzung des Textareas liegt zwar bei 2000, aber: wenn man ganz viele Leerzeilen oder Leerzeichen angibt, dann werden die beim Textareafeld nicht mitgezählt.
Dann ist irgendeine Magie im Spiel. Der Codeauszug, den du zeigst, gibt dieses Verhalten jedenfalls nicht her. Die length-Eigenschaft eines Strings zählt alle Zeichen mit, auch Leerzeichen, Tabs oder Zeilenumbrüche.
> In die Datenbank werden sie aber trotzdem gespeichert. Das heißt, wenn eine Person einen Text mit 2000 Zeichen und dazwischen mit 5 Leerzeilen schreibt, dann kann dieser Text nicht in die Datenbank gespeichert werden.
Das solltest du näher untersuchen, vielleicht findest du dann die Stelle, an der dein Irrtum liegt. Ich kann's mir im Moment nicht vorstellen.
> Auch stört mich, dass, wenn ein Text mit Leerzeilen geschrieben wird, dieser bei der Ausgabe nicht dementsprechend wiedergegeben wird, sondern komplett als Block. Ausgabe erfolgt ganz simpel mit:
> `About: <c:out value="${model.about}"/><br/>`{:.language-html}
Was immer das sein mag - HTML ist es nicht, Javascript auch nicht. Vermutlich eine Metaanweisung deines CMS, das du verwendest. Anyway, dass im HTML-Kontext jeglicher Whitespace auf jeweils ein Leerzeichen komprimiert wird, sollte bekannt sein. Hier ist also wieder ein klassisches Beispiel eines nicht bachteten Kontextwechsels. Für die Ausgabe im Kontext HTML muss der String geeignet aufbereitet werden.
So long,
Martin
--
Die letzten Worte des Polizisten:
Ich hab mitgezählt, Leute: Sechs Schuss, jetzt hat er keine Munition mehr!
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(