«textarea» und onClick
Dino Müller
- javascript
0 Bio0 Dino Müller0 Bio0 Dino Müller0 Bio
Hallo,
ich habe folgendes Problem:
Ich habe in einem Formular mit <textarea> ein entsprechendes Textfeld erstellt.
Unter dem Textfeld ist ein normales Formularfeld, wo die aktuelle Zeichenanzahl
des Textfeldes drinsteht. Dieses wird per 'onChange' oder 'onKeyDown' im Textfeld
realisiert.
Beim IE funktioniert nun alles wunderbar, nur Netscape tut sich schwer damit,
weil 'onChange' erst dann ausgeführt wird, wenn ich mit der Maus außerhalb
des Textfeldes klicke; also dann, wenn es den Focus verliert.
Gibt es eine Möglichkeit, 'onChange' nach jedem Tastenanschlag auszuführen ?
Hi!
Vielleicht kannst Du im Notfall mit eine Funktion schreiben, die die Anzahl der Zeichen ermittelt und sie bei Veraenderung in die Textzeile schreibt, die sich mit window.setTimeout dauernd (jede 10tel Sekunde) selbst aufruft, ganz unabhaengig von etwaigen Veraenderungen.
Das ist dann zwar im Prinzip unschoenes 'Polling', aber wenn es wichtig ist...
Dieses Polling koennte bei Anklicken des Textfeldes aktiviert (onFocus()) werden, und moeglicherweise dann beim Verlassen gestoppt werden (onBlur()).
MfG, Bio
Hi Bio,
erstmal Danke für Deine Antwort.
Aber: window.setTimeout ruft die Funktion doch nur 1x auf.
Außerdem: Wenn du die Funktion immer sich selbst aufrufen läßt,
verschachtelst du dich doch immer weiter. Gibts da nicht irgendwann 'ne
Fehlermeldung von wegen Speicherüberlauf oder so?
Wie sieht's denn mit window.setInterval aus? Kann man das nicht auch nehmen?
Oder wird das wieder nicht vom IE oder NC verstanden ?
Gruß,
Dino.
Hi Bio,
erstmal Danke für Deine Antwort.
Aber: window.setTimeout ruft die Funktion doch nur 1x auf.
Kann sich aber auch selbst wieder aufrufen. Wenn Du das Selbstaufrufen abhaengig machst von einer globaleln Variablen, dann kannst Du die mit der entsprechenden Funktion (z.B. onBlur) anders setzen und so das 'Polling' wieder ausschalten. Getestet habe ich das natuerlich nicht, das Gute daran waere natuerlich, dass das auch auf 3er Browser gehen muesste. Ausserdem ist es die groessere technische Herausforderung ;-)
Außerdem: Wenn du die Funktion immer sich selbst aufrufen läßt,
verschachtelst du dich doch immer weiter. Gibts da nicht irgendwann 'ne
Fehlermeldung von wegen Speicherüberlauf oder so?
Wenn ich mich nicht irre nennt man das Endrekursion bzw. iterativ, wenn man die Funktion erst ganz an ihrem Ende sich selbst aufrufen laesst. In jeder mir bekannten Programmiersprache geht das ohne Speicherueberlauf beliebig oft. Du kannst es ja ueber Nacht mal laufen lassen...
Wie sieht's denn mit window.setInterval aus? Kann man das nicht auch nehmen?
Oder wird das wieder nicht vom IE oder NC verstanden ?
Wie gesagt, ist ein 4er Befehl.
Gruß,
Dino.
Gruss, Bio!
So, ich hab beide ausprobiert, 1x mit window.setTimeout und 1x mit window.setInterval.
Fazit: Beide funktionieren bei Netscape nicht. Der Counter wird erst aktualisiert, wenn
das Textfeld den Focus verliert.
Ich hab' beide Versionen mal angehängt; Hoffe, Ihr könnt damit was anfangen bzw. mir
vielleicht helfen::
-------------------------------------
1. Version mit setTimeout
-------------------------------------
<html>
<head>
<title>Test</title>
<script language="JavaScript">
window.setTimeout("countChars()",500);
function countChars()
{
document.form1.totalChars.value = document.form1.text.value.length;
window.setTimeout("countChars()",500);
}
</script>
</head>
<body>
<form name="form1">
<TEXTAREA cols=34 name=text rows=7 wrap=virtual></TEXTAREA>
<INPUT NAME="totalChars" size=5>
</form>
</body>
</html>
-------------------------------------
2. Version mit setInterval
-------------------------------------
<html>
<head>
<title>Test</title>
<script language="JavaScript">
aktiv = window.setInterval("countChars()",100);
function countChars()
{
document.form1.totalChars.value = document.form1.text.value.length;
}
</script>
</head>
<body>
<form name="form1">
<TEXTAREA cols=34 name=text rows=7 wrap=virtual></TEXTAREA>
<INPUT NAME="totalChars" size=5>
</form>
</body>
</html>
-------------------------------------
MfG, Dino.
Ich hab was fuer Dich...
<html>
<head>
<body bgcolor="00E0E0">
<form name="htmleingabe" action="javascript:">
<textarea name="htmltext" rows=20 cols=50></textarea><br>
<textarea name="showit" rows=1 cols=50></textarea><br>
<hr size=1>
<input type="button" value="Stop/Start" onClick="testof();">
</form>
<script language="JavaScript" type="text/javascript">
<!--
var stop = 1;
var saved= 0;
test();
function test()
{
window.document.htmleingabe.htmltext.blur();
window.document.htmleingabe.htmltext.focus();
if (window.document.htmleingabe.htmltext.value.length - saved)
{
saved = window.document.htmleingabe.htmltext.value.length;
window.document.htmleingabe.showit.value = saved;
}
if (stop)
window.setTimeout("test()",100);
}
function testof()
{
stop = !stop;
}
//-->
</script>
</body>
</html>
Das duerfte es tun.
Gruesse, Bio