Mein kleines JavaScript will nicht
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
arbeiten
attribut
auslese
buchstabe
code
daseinsberechtigung
element
fangen
fehler
formular
nette idee
not
objekt
parameter
register
schnelle antwort
variable speichern
versucht code
weglassen
zahl
-
Hallo,
Ich möchte, dass mit Klick auf einen Link der Wert eines Inputs (Zahl) um 1 erhöht wird.
Ich hab es so versucht:
// <script type="..... und </script>, versteht sich function increase(attribute) { document.register.strength.value = parseInt(document.register.strength.value); document.register.strength.value = document.register.strength.value++; } // (Das Formular heißt register) // ... und weiter unten im HTMl-Teil <a href="javascript:increase('strength');">+</a><input type="text" name="strength">
Wenn ich eine zahl eingeben und auf "+" klicke, passiert aber leider nix...
Wieso funktioniert das Skript nicht? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
document.register.strength.value = ParseInt(document.register.strength.value);
document.register.strength.value = document.register.strength.value++;
Das ist logischer Blödsinn. Denn parseInt() operiert nur auf Werten, nicht auf Objekten.
Das heißt, du kannst zwar aus einem String o.ä einen Int machen, aber du kannst nicht ein Objekt oder eine Objekteigenschaft zu einem Int machen.
(Um genau zu sein, wandelt parseInt() keine Variablen um sondern gibt eine neue int Variable zurück. Und um diesen Rückgabewert nützen zu können, muss man den Rückgabewert in einer Variable speichern)
Du kannst nur eine Objekteigenschaft auslesen und die ausgelesenen Daten in einen Int konvertieren.
Die 2. Zeile ist zwar ne nette Idee, aber es funktioniert nicht (eine genaue Erklärung wäre zu aufwendig).
Hier die Lösung:
document.register.strength.value=ParseInt(document.register.strength.value)+1;
Beitrag geändert: 20.11.2007 21:04:17 von bladehunter -
Danke für die schnelle Antwort.
Funktioniert aber leider immer noch nicht.
Ich hab mal in der Fehlerkonsole nachgeschaut, und da steht das hier:
Fehler:
ParseInt is not defined -
Thx, es klappt jetzt.
Ich hab es jetzt versucht es so zu erweitern, dass das ganze mit einem Parameter geschieht:
function increase(attribute) { document.register.attribute.value=parseInt(document.register.attribute.value)+1; }
Mir war irgendwie schon klar dass es nicht klappt, aber wie muss ichs machen? -
Du musst als Parameter ein Objekt übergeben, weil attribute ein Objekt ist.
Und das ist eben kompliziert und sollte vermieden werden.
Außerdem bezweifle ich, dass in dem Fall eine volle "Pfadangabe" noch legales js ist:
document.register.attribute.value
Den Fett gedruckten Teil müsstest du eigentlich weglassen.
Aber ich schlage dir eine andere (leichter nachvollziehbare) Lösung vor:
function increase(attribute)
{
document.register.elements[attribute].value=parseInt(document.register.elements[attribute].value)+1;
}
Jedes Formular hat für seine Unterlemenete das Array "elements". Und damit kannst du dann arbeiten. -
Oder einfach mit eval();
Ist zwar unschön müsste aber auch gehen.
eval("document.register."+attribute+".value=parseInt(document.register."+attribute+".value)+1" );
Beitrag geändert: 20.11.2007 22:19:51 von ketchupfleck -
Oder einfach mit eval();
Ist zwar unschön müsste aber auch gehen.
eval() ist unprofessionell. Es hat zwar eine Daseinsberechtigung, aber man sollte es trotzdem vermeiden. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage