jQuery ready und click Function

messmar

Erfahrenes Mitglied
Hallo Tutorialer,

ich habe die folgende Funktion für vier Radio Buttons, die abgefragt werden, ob die alle gecheckt sind oder nicht... (die funktion wird ausgelöst, wenn der Submit-Button geclikt wird). Es funktioniert:

HTML:
$('#btnForm').click(function(e){
                var arrRadios = ['input:radio[name="radio_01"]', 'input:radio[name="radio_02"]', 'input:radio[name="radio_03"]', 'input:radio[name="radio_04"]']

                $(arrRadios).each(
                    function(i) {
                        if($(arrRadios[i]).is(':checked') === false) {
                            $('.question_low').addClass("question_high");
                            e.preventDefault();
                        }
                    }
                )
                $("#userDetails").validator();
            });

nun möchte ich aber den Code beim - so zusagen - laden der Seite ausführen lassen und zwar mit der Ready-Funktion:

HTML:
$(document).ready(function(){
var arrRadios = ['input:radio[name="radio_01"]', 'input:radio[name="radio_02"]', 'input:radio[name="radio_03"]', 'input:radio[name="radio_04"]']

                $(arrRadios).each(
                    function(i) {
                        if($(arrRadios[i]).is(':checked') === false) {
                            $('.question_low').addClass("question_high");
                            e.preventDefault();
                        }
                    }
                )
                $("#userDetails").validator();               
});

was aber/leider nicht funktioniert.

Fehlermeldung:
preventDefault is not defined
.

Warum funkt. es dann bei
HTML:
click(function(){...});
und nicht bei:
HTML:
ready(function(){...});

Hat eine/er ne Idee, woran es evtl. legen könnte?

Danke und Gruß
Messmar
 
Bei
Javascript:
click(function(){...});

würde es auch nicht funktionieren. Nur bei
Javascript:
click(function(e){...});


Denn irgendwo musst du ja die Variable "e" definieren. Da du jetzt aber das ready-Event benutzen willst, macht ein Event-Objekt keinen Sinn. Was soll denn beim Laden der Seite verhindert werden? Mit e.preventDefault innerhalb des click-Events verhinderst du das default-Verhalten des Klicks, also das Absenden des Formulars.

Edit: Übrigens kannst du dir ganzen "each" Kram sparen (zumal du es ohnehin falsch verwendest).

Javascript:
if($(arrRadios).find(":not(:checked)").size() === 0) {
    //mindestens einer ist nicht ausgewählt.
}
 
Zuletzt bearbeitet:
Hi,

danke schon mal.

Das was Du bzgl. des Events erwähnst, ist richtig... habe es übersehen bzw. beim posten nicht daran gedacht.

Ich habe vorhin die Event-Funktion sowieso rausgenomme und mit ready-Fuktion getestet... hat aber leider auch nicht funkt.

ganzen "each" Kram sparen (zumal du es ohnehin falsch verwendest)

Wenn ich es falsch verwende, wieso funkt. dann die each-Abfrage bei mir.

Ich glaube, dass ich mich vorhin nicht deutlich ausgedrückt habe... ich habe an die Zahl nicht 4 Radio Buttons, sondern die sind insgesamt: 8 (4 Paare mit: Yes/No) und natürlich jedes Paar hat einen Namen... die sind ja RadioButtons und man kann nur eins aus einm Paar auswählen.

Danke und Gruß
Messmar
 
Wenn ich es falsch verwende, wieso funkt. dann die each-Abfrage bei mir.


Mit each iteriert man über alle DOM-Element eines jQuery Objektes. Was du machst ist nichts weiter als eine for-Schleife, denn innerhalb des each-Blocks legst du jedes mal wieder ein neues jQuery Objekt an, anstatt auf das vorhandene zurückzugreifen. Das wäre also geauso gut wie eine for-Schleife über das Array. Innerhalb von each kannst du mit "this" auf das aktuelle DOM Objekt zugreifen.


Ist dein Problem jetzt eigentlich geklärt oder nicht?
 
denn innerhalb des each-Blocks legst du jedes mal wieder ein neues jQuery Objekt an, anstatt auf das vorhandene zurückzugreifen. Das wäre also geauso gut wie eine for-Schleife über das Array.

Um ehrlich zu sein, versetehe ich nicht 100%/ganz, was du hier meinst, aber ich gehe schon davon aus, dass da irgeneine falsche Logik habe.

Nur wenn ich dann die For-Schleife mit einem: "alert()" verusche zu debuggen, dann erhalte ich alles richtig... irgendwo steckt der Wrum.

Das mit: "this" ist mir schon bekannt, nur in diesem Fall, muss ich mal noch schlauer machen, um raus zu finden, wo ich das Gane fixieren kann.

Vielen Dank für die ausführliche Erklärung.

Gruß
Messmar
 
Zurück