Hallo Udo,
Abhilfe: rufe die Zeilen
io_oInputField.focus();
io_oInputField.select();
zeitverzögert auf. Du mußt natürlich dein Objekt io_oInputField
entweder auf eine globale Variable speichern oder dir den Elementnamen merken.
habe ich aber nicht ganz verstanden.
setTimeout spielt sich im globalen Namensraum ab. Zu dem Zeitpunkt, wo die Objekte dann benötigt werden existieren diese nicht mehr.
Deshalb mußt du diese entweder auf Variable speichern oder entsprechende Informationen übergeben.
Darüber hinaus kann ich es irgendwie vermeiden globale Variablen zu verwenden? Das Problem taucht in mehren Sourcen und für verschiedene Checks auf. Deshalb will ich das Problem in der Funktion selbst lösen und nicht außerhalb mit globalen Variablen.
dann bleibt nur der Name des Elementes oder seine Position im Formular. Mit diese Informationen kannst du dann weiterarbeiten.
Beispiel:
function focussetzen(element)
{
element.focus();
}
setTimeout("focussetzen(document.forms[0].elements[0])",1000)
dieser Aufruf gibt nach einer Sekunde dem ersten Element im ersten Formular den Fokus.
Hier wird das Objekt direkt übergeben.
Bei dir sieht es jedoch anders aus. Dein Objekt ist in der lokalen Variable io_oInputField gespeichert.
Ein Aufruf der Form:
setTimeout("focussetzen(io_oInputField)",1000) erzeugt einen Fehler, da io_oInputField zum Ausführungszeitpunkt nicht mehr existiert bzw. nicht von der Methode ansprechbar ist.
Eine Alternative wäre:
setTimeout("focussetzen(document.forms[0]['"+io_oInputField.name+"'])",1000)
hier gehört javascript: nicht hin, onblur ist bereits javascript
onBlur ist meiner Meinung nach ein Ereignis, auf das man reagieren kann. Die Programmiersprache (Javascript oder VBScript) ist dabei wählbar.
die Doku sagt:
You are probably familiar with the standard types of URLs: http:, ftp:, file:, and so on. With Navigator, you can also use URLs of type javascript: to execute JavaScript statements instead of loading a document. You simply use a string beginning with javascript: as the value for the HREF attribute of anchor tags. For example, you can define the following hyperlink to reload the current page when the user clicks it:
http://developer.netscape.com/docs/manuals/js/client/jsguide/advtopic.htm#1004952
Auch die MS -Doku schweigt sich über den Syntax VBscript: aus.
Am besten du vergleichst einmal, wie die verschiedenen Sprachen hier angegeben werden.
http://msdn.microsoft.com/library/en-us/dnclinic/html/events.asp?frame=true
ansonsten, hast du es ausprobiert? Was sagen die Browser dazu, wenn du z.b. vbscript: verwendest?
<input type="text" name="value" size="10" maxlength="12" value="1" onblur="javascript:IsPositiveFloat(this,false);" />
ist es beabsichtigt, dass beide Felder den gleichen Namen tragen?
Es ist so beabsichtigt. Der Einfachheit halber habe ich weitere Teile im Beispiel weggelassen. Ursprünglich waren unter jedem Input-Feld Element vom Typ Text noch ein Input-Feld Element vom Typ Hidden, die jedoch unterschiedlich benannt werden. Daß dieser Weg gewählt wurde, hat projektspezifische Gründe und würde zu weit gehen es zu erklären.
Nun, das bedeutet, dass du das Element über die Elementenummer ansprechen mußt. Diese mußt du dann über eine Schleife ermitteln.
Viele Grüße
Antje