focus() auf INPUT setzen

newbi_1

Mitglied
Hallo,
ich weiss das das schon oft gepostet wurde finde aber leider keine Lösung :(

Mein Code
PHP:
<HTML>
<HEAD>
	<TITLE>Werte</TITLE>
	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
	
	<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
	// Zeile hinzufuegen
	function clone_this(btn){
		tbl=btn.parentNode.parentNode.parentNode;
		tbl.insertBefore(tbl.rows[tbl.rows.length-2].cloneNode(true),tbl.rows[tbl.rows.length-1]);
	}

	function runde_rel_mess(x) {
			var check = x.search(",");
			if (check != -1) 
				{ x = x.replace(',','.');} 
			if (isNaN(x)) {
				alert(x + " ist keine Zahl!");
				// geht fast window.setTimeout("document.Eingabeformular.getElementsByTagName('INPUT')[0].focus()", 500);
				setTimeout("x.parentNode.parentNode.parentNode.parentNode.getElementsByTagName('INPUT')[3].focus()",500);
			} else {
				var n=2;
				var e = Math.pow(10, n);
				var x = (Math.round(x * e) / e).toString();
				if (x.indexOf('.') == -1) x += '.';
				x += e.toString().substring(1);
				var x =  x.substring(0, x.indexOf('.') + n+1);
				return(x);

			}
		}
		// Runden des eingebenen Wertes und auf Exponentialschreibweise bringen
		function rel_mess(relmess) {
			with (document.Eingabeformular)relmess.value = runde_rel_mess(relmess.value);
		}
</SCRIPT>
<?php
	echo "<FORM onSubmit='return kontrolle()' ACTION='auswert.php' METHOD='POST' NAME='Eingabeformular'>\n";
?>
   <TABLE  cellspacing="0" border="1"> 
   <TR>
    <TH colspan=5><span style='font-family:Verdana; font-size:14'>Messwerte</span></TH>
   </TR>
   <TR>
    <TH><span style='font-family:Verdana; font-size:12'>1</span></TH>
    <TH><span style='font-family:Verdana; font-size:12'>2</span></TH>
    <TH><span style='font-family:Verdana; font-size:12'>3</span></TH>
    <TH><span style='font-family:Verdana; font-size:12'>4</span></TH>
    <TH><span style='font-family:Verdana; font-size:12'>5</span></TH>
  </TR>

<?php
		// Eingabe neuer Messwerte
echo "<DIV>";
		echo "<TR>";
		echo "<TD><INPUT NAME='a[]' ></TD>";
		echo "<TD><INPUT NAME='b[]' ></TD>";
		echo "<TD><INPUT NAME='c[]' '></TD>";
		echo "<TD><INPUT NAME='relmess[]' onblur='rel_mess(this)'></TD>";
		echo "<TD><INPUT NAME='e' VALUE='' DISABLED></TD>";
		echo " </TR>";
echo "</DIV>";

	echo " <TR>";
    echo " <TH colspan=6>";
			echo "<INPUT value=' Neuen Wert eingeben ' onclick='javascript:clone_this(this);' TYPE='button'/>";
    echo " </TH>";
	echo " </TR>";
	echo "</TABLE> ";
	// Beendigung der Datenbakverbindung
	
	echo "<CENTER><BR><br><INPUT ALIGN=CENTER TYPE=SUBMIT VALUE='  Datensatz abspeichern   '>\n";
    echo "</FORM>\n";

//----------------------------------------------------------------------------------------------------------------------------------
?>

Ich habe 5 Eingabefelder, die ich mit dem Button "Neuen Wert eingeben" clone.
Ich möchte überprüfen, dass nur Zahlen einegegeben werden können und diese werden formatiert (klappt wunderbar.)

Falls ein Buchstabe eingegeben wird, wird mit einer Fehlermeldung darauf hingewiesen, und der FOCUS sollte wieder auf das INPUT Feld gehen. Tut aber nicht.
Ich habe schon rumgelesen mit TIMEout usw. aber der Cursor sprint immer in ein falsches Feld.

Vielleicht kann mir ja jemand meinen Fehler mitteilen.;)
Danke im voraus.
 
Hi,

am einfachsten wäre es, der Prüffunktion das Input-Element selbst zu übergeben. Den Wert kannst du dort auch auslesen und das Hangeln durch den Dokumentenbaum kannst du dir ersparen.

Beispiel:
Code:
function runde_rel_mess(relmess) {
  var x = relmess.value;
  var _relmess = relmess;
  var check = x.search(",");
  if (check != -1)
      { x = x.replace(',','.');}
  if (isNaN(x)) {
      alert(x + " ist keine Zahl!");
      // geht fast window.setTimeout("document.Eingabeformular.getElementsByTagName('INPUT')[0].focus()", 500);
      //setTimeout("x.parentNode.parentNode.parentNode.parentNode.getElementsByTagName('INPUT')[3].focus()",500);
      //relmess.focus();
      window.setTimeout(function(){_relmess.focus();}, 1);
      return 0;
  } else {
      var n=2;
      var e = Math.pow(10, n);
      var x = (Math.round(x * e) / e).toString();
      if (x.indexOf('.') == -1) x += '.';
      x += e.toString().substring(1);
      var x =  x.substring(0, x.indexOf('.') + n+1);
      return(x);
  }
}
// Runden des eingebenen Wertes und auf Exponentialschreibweise bringen
function rel_mess(relmess) {
	with(document.Eingabeformular)
  	relmess.value = runde_rel_mess(relmess);
}

Ausserdem solltest du einen Default-Zahlenwert zurückgeben, da die Handlungsmöglichkeiten des Benutzers sonst recht eingeschränkt werden.

[EDIT]
Der Firefox setzt in der alten Variante den Fokus nicht wie gewünscht. Hier muss stattdessen mit einer Verzögerung (setTimeout) gearbeitet werden.
(zusätzliche Änderungen sind grün gekennzeichnet)
[/EDIT]

Ciao
Quaese
 
Zurück