Gernot Back: Aufruft von Funktionen

Beitrag lesen

Hallo Joachim,

ich denke Du solltest onfocus einen setTimout/Interval laufen lassen, den Du onblur mit clearTimeout/Interval wieder stoppst. Dabei ruft Du eine Funktion, die ständig die Länge prüft.

Das scheint mir auch die beste Lösung zu sein, denn das was ich mir ausgedacht habe, würde bei Copy und Paste nicht funktionieren: Je nach keyCode (backspace oder andere Taste, wird eins zur Länge des Textareainhalts hinzugezählt oder davon abgezogen, denn zum Zeitpunkt des Eventfeuerns ist das Zeichen noch nicht in der Textarea angekommen. Bei STRG+X oder STRG+V weiß man aber nicht wie viele Zeichen hinzukommen und die Summe stimmt erst wieder, wenn man noch eine weitere normale  Eingabetaste drückt. Ähnlich verhält es sich beim Markieren und anschließendem Löschen von Text.

Interessant ist in diesem Zusammenhabg die lange Leitung von Opera und Mozilla im Vergleich zum IE6. Bei ersteren beiden Browseren muss die Backspace-Korrektur nämlich doppelt erfolgen:

  
<html>  
<head>  
<title>Eingabelängenkontrolle bei Textareas</title>  
<meta name="author" content="Gernot Back">  
<meta name="generator" content="Ulli Meybohms HTML EDITOR">  
<script type="text/javascript">  
[code lang=javascript]  
function melde (obj, e) {  
   var keyCode = e.which || e.keyCode;  
   var laenge = obj.value.length + 1;  
   if (keyCode == 8) laenge--;  //Backspace  
   if (e.which && e.which == 8 && laenge != 0) laenge--;  
   if (laenge > 19) {  
      alert('Die Eingabe ist zu lang!');  
      return;  
   }  
   do obj = obj.nextSibling;  
   while (obj.nodeName.toUpperCase() != 'INPUT');  
   obj.value = laenge;  
}

</script>
</head>
<body>
   <textarea rows="10" cols="30" onkeypress="melde(this, event)"></textarea><br>
   Länge des eingegebenen Textes: <input type="text" readonly size="2" value="0">
</body>
</html>[/code]

Gruß Gernot