dynamisch gefüllte Formularfelder leeren
sunny
- javascript
Hallo liebes Forum!
Ich hab hier ein Formular mit Textfeldern die bereits Inhalt haben, dieser Inhalt wird per ASP in die Felder geschrieben. Nun möchte ich einen Button erstellen, der bei Klick alle Felder leert, leider funktioniert das aber nicht.
Hier mein Formular:
<form name="formular" method="post" action="verarbeitung_preise.asp">
...
<%do while not objrs.eof
mitarbeiter = objrs("mitarbeiter")
euro = objrs("euro")
id = objrs("id")%>
<tr>
<td><%response.write mitarbeiter%></td>
<td><input name="euro" type="text" value="<%response.write euro%>" size="25" class="form">
<input name="id" type="hidden" value="<%response.write id%>">
</td>
</tr>
<%objrs.movenext
loop%>
<tr>
<td colspan="2"><input type="submit" name="Submit" value="Änderungen speichern"> <input type="reset" name="Reset" value="Felder leeren"></td>
</tr>
</form>
So funktioniert das aber leider nicht, bei Klick auf den "Felder leeren"-Button tut sich gar nichts, ich bekomme allerdings auch keine Fehlermeldung.
Weiß jemand eine Lösung für das Problem?
Liebe Grüße,
sunny
Hallo,
reset leert ja auch keine Felder, sondern setzt sie auf den Ursprungswert zurück, welcher im value steht. Um die Felder zu leeren mußt Du entweder die Seite neu laden und die values auf "" setzen oder per DOM z.B. mit getElementsByName die value-Werte auf 0 setzen.
Viele Grüße,
Jürgen
Hallo!
reset leert ja auch keine Felder, sondern setzt sie auf den Ursprungswert zurück, welcher im value steht. Um die Felder zu leeren mußt Du entweder die Seite neu laden und die values auf "" setzen oder per DOM z.B. mit getElementsByName die value-Werte auf 0 setzen.
Ich habs jetzt so versucht:
<input type="reset" name="Reset" value="Felder leeren" onClick="Javascript:document.getElementsByName("euro")='';">
Das geht aber nicht, es fehlt, denk ich mal, die Angabe welches Element angesprochen werden soll. Aber es heißen ja alle Felder "euro" und ich will auch alle Felder, die diesen Namen haben, ansprechen. Kann man mit getElementsByName überhaupt alle Felder ansprechen?
Oder muss ich das dann doch anders machen?
(Die Lösung mit dem Neuladen der Seite gefällt mir nicht unbedingt, sorry ;) )
Liebe Grüße,
sunny
Hallo!
reset leert ja auch keine Felder, sondern setzt sie auf den Ursprungswert zurück, welcher im value steht. Um die Felder zu leeren mußt Du entweder die Seite neu laden und die values auf "" setzen oder per DOM z.B. mit getElementsByName die value-Werte auf 0 setzen.
Ich habs jetzt so versucht:
<input type="reset" name="Reset" value="Felder leeren" onClick="Javascript:document.getElementsByName("euro")='';">
Das geht aber nicht, es fehlt, denk ich mal, die Angabe welches Element angesprochen werden soll. Aber es heißen ja alle Felder "euro" und ich will auch alle Felder, die diesen Namen haben, ansprechen. Kann man mit getElementsByName überhaupt alle Felder ansprechen?
Oder muss ich das dann doch anders machen?
(Die Lösung mit dem Neuladen der Seite gefällt mir nicht unbedingt, sorry ;) )
Liebe Grüße,
sunny
ich glaube du musst auch auf die Text eigenschaft des feldes zugreifen also ungefähr so:
document.getElementsByName("euro").nodeValue='';">
das sollte eigentlich gehen
mfg
teal
ich glaube du musst auch auf die Text eigenschaft des feldes zugreifen also ungefähr so:
document.getElementsByName("euro").nodeValue='';">
Also das:
<input type="reset" name="Reset" value="Felder leeren" onClick="Javascript:document.getElementsByName("euro").nodeValue='';">
geht leider auch nicht :(
Lg,
sunny
ich glaube du musst auch auf die Text eigenschaft des feldes zugreifen also ungefähr so:
document.getElementsByName("euro").nodeValue='';">
Also das:
<input type="reset" name="Reset" value="Felder leeren" onClick="Javascript:document.getElementsByName("euro").nodeValue='';">
geht leider auch nicht :(
Lg,
sunny
und wie stehts mit
document.getElementsByName("euro").firstChild.nodeValue='';
und schreib vielleicht mal das Javascript klein also
statt onClick="Javascript... besset onClick="javascript:
mfg
teal
und wie stehts mit
document.getElementsByName("euro").firstChild.nodeValue='';
Funktioniert auch nicht.
und schreib vielleicht mal das Javascript klein also
statt onClick="Javascript... besser onClick="javascript:
Eigentlich sollte man "javascript" eh ganz weglassen, wie Jürgen K. bereits bemerkt hat. Aber es funktioniert weder ohne noch groß- noch kleingeschrieben ...
Lg,
sunny
Aloha!
ich glaube du musst auch auf die Text eigenschaft des feldes zugreifen also ungefähr so:
document.getElementsByName("euro").nodeValue='';">
Der Zugriff mit "getElementsByName" deutet durch den Namensteil "Elements" schon an, dass als Ergebnis nicht nur ein Element geliefert wird, sondern mehrere - ergo: Ein Array!
Man kommt nicht umhin, in einer Schleife auf alle Elemente des Arrays zuzugreifen und entsprechende Werte zuzuweisen.
for (i=0; i<document.getElementsByName("euro").length; i++)
{
document.getElementsByName("euro")[i].hiergehtsweiter...
}
Ich würde aber aus Kompatibilitätsgründen zu IE 4 und NS 4 die weiterhin gültige Methode über document.forms[].elements[] gehen wollen.
http://selfhtml.teamone.de/javascript/objekte/elements.htm
- Sven Rautenberg
Hallo Sven,
danke, das schaut ja schonmal gut aus!
Habs jetzt so versucht:
<script type="text/javascript">
<!--
function leeren() {
for (i=0; i<document.getElementsByName("euro").length; i++)
{
document.getElementsByName("euro")[i].value='';
}
}
//-->
</script>
Und dann:
<input type="reset" name="Reset" value="Felder leeren" onClick="leeren();">
Das geht aber leider auch nicht!? Was hab ich jetzt falschgemacht?
Ich würde aber aus Kompatibilitätsgründen zu IE 4 und NS 4 die weiterhin gültige Methode über document.forms[].elements[] gehen wollen.
Es handelt sich um ein kleines Administrationstool, das nur auf einem einzigen Rechner mit IE 6.0 funktionieren muss, das ist also kein Problem.
Lg,
sunny
<input type="reset" name="Reset" value="Felder leeren" onClick="Javascript:document.getElementsByName("euro")='';">
Mit document.getElementsByName("euro")[0] wird das erste Feld angesprochen, mit document.getElementsByName("euro")[1] das zweite usw.
Leite also onclick auf eine Funktion weiter, die in einer for-Schleife alle Felder auf '' (nicht 0, war Blödsinn vorher von mir!) setzt. Das Javascript: im onclick kannst Du Dir übrigens sparen, onclick ist eh schon JavaScript.
Viele Grüße,
Jürgen
Mit document.getElementsByName("euro")[0] wird das erste Feld angesprochen, mit document.getElementsByName("euro")[1] das zweite usw.
Leite also onclick auf eine Funktion weiter, die in einer for-Schleife alle Felder auf '' (nicht 0, war Blödsinn vorher von mir!) setzt. Das Javascript: im onclick kannst Du Dir übrigens sparen, onclick ist eh schon JavaScript.
Also irgendwie steh ich jetzt aber auf der Leitung ... wie soll ich hier eine for-Schleife anwenden? Ich weiß ja nicht, wieviele Felder mit dem Namen "euro" es geben wird!?
Lg,
sunny
Ich kann zwar jetzt leider kein ASP, aber ich nehme an, es ist von irgendwas abhängig, wie viele euro-Felder es geben wird. Und diese Anzahl (wie immer sie sich errechnet) kann man ja mit übertragen und entsprechend weit die for-Schleife zählen lassen.
Ich kann zwar jetzt leider kein ASP, aber ich nehme an, es ist von irgendwas abhängig, wie viele euro-Felder es geben wird. Und diese Anzahl (wie immer sie sich errechnet) kann man ja mit übertragen und entsprechend weit die for-Schleife zählen lassen.
Wieviele Felder es geben wird hängt davon ab, wie viele Datensätze in der Datenbank stehen aus der ausgelesen wird!
Aber ich denke, der Lösungsansatz von Sven Rautenberg müsste funktionieren:
for (i=0; i<document.getElementsByName("euro").length; i++)
{
document.getElementsByName("euro")[i].value='';
}
Nur irgendwo muss ich einen Fehler drinhaben, es funktioniert nämlich immer noch nicht (keine Fehlermeldung, aber geleert werden die Felder auch nicht)!?
Lg,
sunny
for (i=0; i<document.getElementsByName("euro").length; i++)
{
Mach hier dazwischen mal ein alert rein und laß Dir den Wert von i bzw. von document.getElementsByName("euro")[i].value ausgeben, vielleicht sieht man so, wo der Fehler ist. (Hoffentlich sinds nicht zu viele Felder, sonst gibts ein Alert-Terror.)
document.getElementsByName("euro")[i].value='';
}
for (i=0; i<document.getElementsByName("euro").length; i++)
{
Mach hier dazwischen mal ein alert rein und laß Dir den Wert von i bzw. von document.getElementsByName("euro")[i].value ausgeben, vielleicht sieht man so, wo der Fehler ist. (Hoffentlich sinds nicht zu viele Felder, sonst gibts ein Alert-Terror.)
document.getElementsByName("euro")[i].value='';
}
Jetzt wirds lustig:
Alle Alerts (sowohl für i als auch für docment.get...) sind korrekt. Sobald ich beim ersten Alert auf OK klicke ist das Feld[0] leer, beim Klick auf das OK vom zweiten Alert leert sich auch das Feld[1] usw. bis schließlich alle Felder leer sind und ich das letzte Alert bestätigen muss. Danach sind alle Felder wieder voll!?!?
Ach - jetzt bin ich grad während des Schreibens draufgekommen, ich hab das return false; vergessen! Jetzt funktionierts!
Danke für Eure schnellen und hilfreichen Antworten!
Lg,
sunny
Hallo liebes Forum!
Ich hab hier ein Formular mit Textfeldern die bereits Inhalt haben, dieser Inhalt wird per ASP in die Felder geschrieben. Nun möchte ich einen Button erstellen, der bei Klick alle Felder leert, leider funktioniert das aber nicht.
Hier mein Formular:
<form name="formular" method="post" action="verarbeitung_preise.asp">
...
<%do while not objrs.eof
mitarbeiter = objrs("mitarbeiter")
euro = objrs("euro")
id = objrs("id")%>
<tr>
<td><%response.write mitarbeiter%></td>
<td><input name="euro" type="text" value="<%response.write euro%>" size="25" class="form">
<input name="id" type="hidden" value="<%response.write id%>">
</td>
</tr>
<%objrs.movenext
loop%>
<tr>
<td colspan="2"><input type="submit" name="Submit" value="Änderungen speichern"> <input type="reset" name="Reset" value="Felder leeren"></td>
</tr>
</form>
So funktioniert das aber leider nicht, bei Klick auf den "Felder leeren"-Button tut sich gar nichts, ich bekomme allerdings auch keine Fehlermeldung.
Weiß jemand eine Lösung für das Problem?
Liebe Grüße,
sunny
der witz daran ist das der löschen knopf eigentloch gar nicht löscht sondern nur den originalzustand herstellt. Das macht der indem er den Inhalt im value="" Bereich ausliest und ihn wieder in das Textfeld hineinschreibt. Um das Problem zu lösen müsstest du also das Skript erneut aufrufen, dabei aber den Value Wert nicht schreiben lassen (mithilfe einer if-schleife und variablen) zum Beispiel.
if(set=="false") then <input value="">
else <input value=text>
beim aufrufen musst du nur die variable set mitschicken also seite.asp?set=false
und schon sollte alles gelöscht sein.
mfg
teal