textfeld bearbeiten (!)
balu
- javascript
Hallo!
Wie habe ich per javascript zugriff auf das, was in einem Textfeld angezeigt wird?
Ich möchte im Textfeld als voreingestellten Text einen "Tip" für den User hinterlassen. Dabei ergeben sich aber zwei Probleme:
1. Wenn der user seine Eingabe machen will, muss er erst den gesamten Text markieren oder öfters doppelklicken und ihn löschen, bevor er seine Eingabe machen kann.
2. Außerdem soll dieser "Tipp" nicht als Variable abgeschickt werden, wenn der User ihn gar ignoriert.
Lösungen wären:
1. Per Javascript müsste man den inhalt des Textfensters löschen, oder ihn zumindest automatisch markieren können. Dabei sollte er aber wieder erscheinen, wenn der Fokus vom Textfeld wieder weggeht wenn keine Eingabe gemacht worden ist. Außerdem sollte der der "Tip" auch verschwinden, bevor das Formular abgeschickt wird.
Ich habe im Netz nach lösungen oder hinweisen auf mögliche vorgehensweisen gesucht, aber mit javascript kenne ich mich noch recht wenig aus.
Vielleicht weiss ja zufällig jemand wie man das durchführt?
danke!
balu
Hallo.
Wie habe ich per javascript zugriff auf das, was in einem Textfeld angezeigt wird?
http://selfhtml.teamone.de/javascript/objekte/elements.htm#value
- Per Javascript müsste man den inhalt des Textfensters löschen, oder ihn zumindest automatisch markieren können. Dabei sollte er aber wieder erscheinen, wenn der Fokus vom Textfeld wieder weggeht wenn keine Eingabe gemacht worden ist.
<textarea onfocus="if(this.value == this.defaultValue){this.value = ''}" onblur="if(this.value == ''){this.value = this.defaultValue}">Text in der Textarea</textarea>
Außerdem sollte der der "Tip" auch verschwinden, bevor das Formular abgeschickt wird.
- Entweder du weist dem Textfeld beim Absenden eine leere Zeichenkette, also "", als Namen zu (http://selfhtml.teamone.de/javascript/objekte/elements.htm#name), dann wird sein Inhalt nämlich gar nicht erst übergeben.
- Oder du nimmst das Textfeld aus dem Form-Tag raus und gibst ihm sein eigenes.
- Oder du löschst den Wert des Textfeldes mit <form onsubmit="this.TextfeldName.value = ''">.
Gruß
Norbert
Hallo,
zumindest sollte mit onChange das funktionieren. Der Focus ist ja auch da, wenn ich etwas lösche.
z.B.
<INPUT type="text"
onfocus="var fokus=true" onblur="var fokus=false"
onChange="(fokus==true)?aktion_fokus(this.value):aktion_blur(this.value)" >
im script kannst Du dann den Textfeld-Inhalt wie einen String bearbeiten.
onChange funzt aber nicht bei allen Browser, daher könnte man mit setInterval eine Dauerschleife machen, die ständig die Veränderungen abfragt, und bei Absenden des Formulars gecancelt wird. Das ist z.B. bei einer Zensur vor dem Absenden (böse Worte, verbotene Codes) oder einer Rechtsschreibprüfung sinnvoll. Ich habe das mal programmiert, um den Status eines Textareas mit begrenzter Kapazität abzufragen ("noch 244 Bytes frei für die Texteingabe").
onfocus='setInterval("aktion_fokus("+this.value+")",500)' onBlur='setInterval("aktion_blur("+this.value+")",500)'
Natürlich kann man auch im Script den Value ständig überwachen:
document.ID_form.ID_textfeld.value (IE <4 und Netscape <5)
document.getElementByID(ID_textfeld).value
Ich habe verschieden Formualrscripte geschrieben und kann Dir per eMail weiterhelfen. Zur Zeit arbeite ich an einer Undo-Funktion für Formulare. Habe noch Search&Replace für textareas anzubieten.
Also meld Dich einfach ;-)
Michael
Hallo.
zumindest sollte mit onChange das funktionieren. Der Focus ist ja auch da, wenn ich etwas lösche.
???
onfocus="var fokus=true" onblur="var fokus=false"
onChange="(fokus==true)?aktion_fokus(this.value):aktion_blur(this.value)"
Hmm, jetzt lass uns mal überlegen ob das nicht das selbe ist wie:
onfocus="aktion_fokus(this.value)"
onblur="aktion_blur(this.value)"
Ja, ist es, zumindest annähernd, da das funktionieren würde. Und jetzt lass uns mal weiter denken, brauchen wir dann onchange, ähm nein, brauchen wir nicht.
Zumal onchange erst bei erfolgter Wertänderung und beim Verlassen des Formularfeldes feuert, das heißt wiederum, dass das (sofern das Ganze überhaupt funktionieren sollte), was beim onfocus passieren soll gar nicht passieren _kann_.
Und was folgt daraus? Richtig, wir machen lieber sowas hier:
<form action="#" onsubmit="if(this.TextfeldName.value == this.TextfeldName.defaultValue){this.TextfeldName.name = ''; this.TextfeldName.value = ''}">
<textarea name="TextfeldName" onfocus="if(this.value == this.defaultValue){this.value = ''}" onblur="if(this.value == ''){this.value = this.defaultValue}">Text in der Textarea</textarea><br>
<input type="submit">
</form>
onChange funzt aber nicht bei allen Browser, daher könnte man mit setInterval eine Dauerschleife machen, die ständig die Veränderungen abfragt, und bei Absenden des Formulars gecancelt wird.
Das ist z.B. bei einer Zensur vor dem Absenden (böse Worte, verbotene Codes) oder einer Rechtsschreibprüfung sinnvoll.
Das reicht auch noch beim Submit, welcher dann immer noch mit return false unterbrochen werden kann.
onfocus='setInterval("aktion_fokus("+this.value+")",500)' onBlur='setInterval("aktion_blur("+this.value+")",500)'
Ich hab auch gern mehrere Intervalle gleichzeitig am laufen (das war Ironie).
Gruß
Norbert
Danke Norbert! du bist der King ;-)
Danke auch dir, MichelM.
funktioniert tadellos :-)
danke!
cya
balu