Textfeld hinaufzählen

Miraculixx

Erfahrenes Mitglied
So, da hab ich schon das nächste Problem:
Ich möchte durch Klick auf einen Button den Wert in einem Textfeld erhöhen/verringern.

Da habe ich mir folgende JavaScript-Funktion zusammengebastelt:
Code:
function updateFunc(id, what)
{
  if(what == "-")
  {
	  if(document.getElementById)
	  {
	    x = document.getElementById(id);
	    x.value -= 1;
	  }
	  else if(document.all)
	  {
	    x = document.all[id];
	    x.value -= 1;
	  }
	}
	
  else if(what == "+")
  {
	  if(document.getElementById)
	  {
	    x = document.getElementById(id);
	    x.value += 1;
	  }
	  else if(document.all)
	  {
	    x = document.all[id];
	    x.value += 1;
	  }
	}
}

Der Aufruf sieht z.B. so aus:
HTML:
  <td align="center"><input type="button" name="iri_m" value="  -  " onclick="updateFunc('iri_t', '-')">
  <input type="text" size="3" maxlength="4" ID="iri_t" name="iri_t" value="<?php echo $_SESSION["iri"] ?>">
  <input type="button" name="iri_p" value=" + " onclick="updateFunc('iri_t', '+')"></td>

Das Witzige: wenn ich auf den minus-Button klicke, wird der Wert im Textfeld völlig richtig um eins verringert. wenn ich aber auf den plus-Button klicke, dann schreibt sich an die Zahl eine 1 hinten dran, also aus 20 wird z.b. 201, ich hätte aber lieber 21...
Hat jemand eine Idee woran das liegen könnte?
Thx für Antworten.
 
JS hat leider eine leidige Eigenschaft von Java übernommen: In JavaScript ist der Operator, der Strings verkettet und der, der Ints addiert leider der gleiche, ein Plus ( + ). Der Wert von Textfeldern (wie das "Text" in "Textfeld" schon sagt) ist aber immer ein String und so wird das Plus nicht als Additionsoperator sondern als Verkettungsoperator interpretiert und die Eins einfach angehängt. Beim Minus hingegen wandelt JS den String aus dem Wert vom Textfeld automatisch in ein Int um, weil das Minus numal ein Operator für Integers ist.

Du müsst also einfach:
Code:
x.value += 1;
durch
Code:
x.value = Number(x.value) + 1
ersetzten und alles geht.

Dein Code lässt sich allerdings noch um ein Vielfaches vereinfachen:
Code:
function updateFunc(id, what) {
   	x = document.getElementById ? document.getElementById(id) : document.all[id];
   	x.value = eval('Number(x.value)'+ what +'1');
   }
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück