Moin!
Die etwas seltsame Übergabe irgendwelcher Parameter an die Funktion führt zu Problemen.
<SCRIPT LANGUAGE="JavaScript">
<!--
function checkFormular(FrmIndex)
^^^^^^^^
Die Funktion erwartet einen Parameter.
{
if(FrmIndex.txtKDNR.value=="") {
^^^^^^^^^^^^^^^^^^^^^^
Dieser Parameter muß ein Objekt vom Typ Forms sein. Andernfalls wäre dieser Zugriff (und der folgende Aufruf der Methode focus)nicht erlaubt.
FrmIndex.txtKDNR.focus();
alert("Bitte geben Sie eine Kundennummer ein!");
return false;
}
return true;
}
//-->
</SCRIPT>
<FORM name="FrmIndex" id="FrmIndex" action="FAKTURA_INDEX.ASP
method="post" OnSubmit="return checkFormular(FrmIndex)" >
^^^^^^^^^^^^^^^^^^^^^^^
Du übergibst hier aber eine ganz gewöhnliche Variable, die nicht näher definiert ist.
Lösungsansatz:
1. Ich würde nicht andauernd den gleichen Namen (FrmIndex) für total unterschiedliche Dinge verwenden: Formularname, FormularID, Funktionsparameter, übergebene Variable etc. Immer schön trennen:
Der Formularname kann bleiben. Warum du zusätzlich noch die ID eingefügt hast, weiß ich nicht. Meine Formulare funktionierten bislang ohne ID ganz prima.
Den Parameter in der Funktion solltest du umbenennen. Einfach, damit Klarheit herrscht (auch bei dir ;) ), daß jetzt exakt der Funktionsparameter gemeint ist, und nichts irgendwie nebenbei definiertes zufällig aus einem globaleren Scope "durchscheint". Wenn du nämlich außerhalb der Funktion noch die Variable FrmIndex definiert hast, bzw. (noch schlimmer) dich irgendwo vertippt hast, dann gilt bei manchen Anweisungen der Funktionsparameter, bei anderen die globale Variable - Chaos! Vorschlag: Nenne den Parameter "formular".
Und den Funktionsaufruf selbst behandeln wir in 2. :)
2. Du übergibst den falschen Parameter. Du brauchst, wie erwähnt, bei deiner derzeitigen Programmierung ein Formular-Objekt.
return checkFormular(this) könnte helfen. "this" bezeichnet das aktuelle, eigene Objekt. Mir ist aber immer reichlich unklar, was das genau bezeichnet, also verwende ich es nicht gern.
Besser: Übergebe einen String mit dem Namen des Formulars.
return checkFormular('FrmIndex')
Dann mußt du deine Funktion etwas umstricken, aus (dem eigentlich umzubenennenden!) "FrmIndex" wird innerhalb der Funktion ein "document.forms[Parameter]" (mit "Parameter" ist der Funktionsparameter gemeint, der ja nicht mehr "FrmIndex" heißen soll). Und schon gehts ebenfalls.
Für Irrungen und Wirrungen keine Haftung. ;)
- Sven Rautenberg