functionsparameter wird nicht erkannt

guenter024

Erfahrenes Mitglied
Hallo,

bin mit Javascript noch etwas ungeschickt.
Daher dieses Problem:

Habe eine Auswahl von radio-Buttons, die name-Attribute haben den Wert B26.
Habe dann ein input-Textfeld definiert, welche, falls ein radio-Button aktiviert wurde, diese wieder auf checked=false setzen soll.
HTML:
<form name="Testform" action="test.php">
<input type="radio" name="Pizza1" id="eins" value="1" /> <label for="eins">eins </label>
<input type="radio" name="Pizza1" id="zwei" value="2" /> <label for="zwei">zwei </label>
<input type="radio" name="Pizza1" id="drei" value="3" /> <label for="drei">drei </label>
<br />
<label for="Pizza2">oder mehr: </label><input type="text" name="Pizza2" id="Pizza2" value="" onchange="disableRadios('Pizza1')" />
<input type="submit" value="Abschicken" />


</form>
<script type="text/javascript">
function disableRadios(thisArr) {

    alert (thisArr);  // Ausgabe: Pizza1
    alert(document.Testform.thisArr.length);   //  keine Ausgabe

    // weiterer Code

}
</script>


Problem:
Der Funktionsparameter B26 wird zwar übergeben ( alert (thisArr) liefert B26 ), aber alert(document.Anfrage.thisArr.length); erzeugt keine Ausgabe.


Woran liegt das, bzw. wie kann ich den Inhalt der name-Attribute korrekt übergeben?

Danke im Voraus für jede Hilfe
:)
 
Ich sehe kein "B26" und verstehe auch nicht so wirklich was du machen willst.

Vielleicht beschreibst du einfach nochmal den gewünschten Ablauf.
 
Sorry, natürlich gibt alert im Beispielcode Pizza1 aus.

Der Ablauf sollte so sein:
Wenn bei den Auswahlbuttons nicht das gewünschte dabei ist, soll der Benutzer in einem Eingabefeld einen eigenen Text eingeben können.
Wenn hier dann eine Eingabe erfolgt, sollen die Radiobuttons "ausgecheckt" werden.
Ich dachte, das sollte mit Javascript möglich sein.

Da es sich um ein großes Formular mit vielen solcher Auswahlmöglichkeiten mit Alternativtext handelt dachte ich, bei entsprechender Parameterübergabe auf das entsprechende Array zugreifen zu können und so mit einer Funktion auszukommen, anstatt für jede Auswahl eine eigene Funktion erstellen zu müssen.

Falls jemand anderes auch mal sowas sucht, habe nun die Lösung herausbekommen, wie man das name-Attribut an die Funktion übergeben kann.
HTML:
<form name="Testform" action="test.php">
<input type="radio" name="Pizza" id="Funghi" value="Funghi" /> <label for="Funghi">Funghi </label>
<input type="radio" name="Pizza" id="Hawaii" value="Hawaii" /> <label for="Hawaii">Hawaii </label>
<input type="radio" name="Pizza" id="Margherita" value="Margherita" /> <label for="Margherita">Margherita </label>
<br />
oder eine
<label for="Wunschpizza">Wunschpizza: </label><input type="text" name="Wunschpizza" id="Wunschpizza" value="" onchange="disableRadios('Pizza')" />
<br />
<br />
<input type="radio" name="Nudelgericht" id="Makkaronie" value="Makkaronie" /> <label for="Makkaronie">Makkaronie </label>
<input type="radio" name="Nudelgericht" id="Spaghettie" value="Spaghettie" /> <label for="Spaghettie">Spaghettie </label>
<input type="radio" name="Nudelgericht" id="Farfalle" value="Farfalle" /> <label for="Farfalle">Farfalle </label>
<br />
oder ein
<label for="Wunschnudelgericht">Wunschnudelgericht: </label><input type="text" name="Wunschnudelgericht" id="Wunschnudelgericht" value="" onchange="disableRadios('Nudelgericht')" />
<br /><br />
<input type="submit" value="Abschicken" />


</form>
<script type="text/javascript">
function disableRadios(thisArr)
{
    var Arr = document.Testform[thisArr];

    for(i = 0; i < Arr.length; i++)
    {
        if(document.Testform[thisArr][i].checked == true)
        document.Testform[thisArr][i].checked = false;
    }
}
</script>
 
Schade zu langsam.

Die Variable "Arr" kannst du dir sparen. Du kannst doch mit thisArr.length darauf zugreifen.
Und wenn alle Optionsfelder abgewählt werden sollen, dann kannst du dir die Prüfung mit IF eigentlich auch sparen.

Javascript:
function disableRadios(thisArr) {
	for (a = 0; a < thisArr.length; a++) {
		document.getElementsByName(thisArr)[a].checked = false;
	}
}
 
Zuletzt bearbeitet:
Danke für die Antwort, hast Recht.
HTML:
function disableRadios(thisArr) {
    for(i = 0; i < [thisArr].length; i++) {
        document.Testform[thisArr][i].checked = false;
    }
}

EDIT:

Korrektur (ohne die eckigen Klammern, sonst gehts nicht):

HTML:
function disableRadios(thisArr) {
    for(i = 0; i < thisArr.length; i++) {
        document.Testform[thisArr][i].checked = false;
    }
}

Nochmal EDIT:

Scheint ohne die Variable doch nicht zu gehen, die Funktion reagiert hier dann nur auf den ersten Radiobutton (zumindest bei mir...).

Mit Variable geht es einwandfrei.
Also doch wieder
HTML:
function disableRadios(thisArr)
{
    var Arr = document.Testform[thisArr];

    for(i = 0; i < Arr.length; i++)
    {
        if(document.Testform[thisArr][i].checked == true)
        document.Testform[thisArr][i].checked = false;
    }
}

Vielleicht liegts auch an der if-Abfrage, den es kann ja nur ein Button checked==true sein.
 
Zuletzt bearbeitet:
Ah , das ist es also...

Laut selfhtml ist getElementsByName Javascript 1.5, document.form.name Javascript 1.0.
Da ja beide Varianten funktionieren, würde mich interessieren, wann man besser was schreibt?

Ich sag schon mal "Danke" :)
 
Zurück