jQuery: $(this) jenach Element-Namen, einer bestimmten Variable zuweisen

messmar

Erfahrenes Mitglied
Guten Morgen zusammen,

Ich versuche das Schlüssel-Wort:
Code:
$(this)
jenach bestimmten Element, einer bestimmten Variable zu zuweisen, um es danach beliebig zu verweden...

Code:

Code:
(function($){
    ;$.fn.selectEl = function(userOptions){

        return this.each(function(){
            var El = $(this);
            
            El.find(':radio, :checkbox, select').each(function(){
                var $sd, $sm, $sy, $sx;
                
                if($(this).attr('name') === 'u_Day')$sd = $(this);
                if($(this).attr('name') === 'u_Month')$sm = $(this);
                if($(this).attr('name') === 'u_Year')$sy = $(this);
                if($(this).attr('name') === 'u_Title')$sx = $(this);
                
                alert('$SD: ' + $sd.attr('name') + ' $SM: ' + $sm + ' $SY: ' + $sy + ' $SX: ' + $sx);
                
                if($sm)
                    $sm.on({
                        'change': function(){
                            if($sm.val() === '04'){
                              alert('Change');
                              
                              if($sd)
                                  alert('Change' + $sd.attr('class'));
                                  $("option:last", $sd).remove();
                                   alert('Day: ' + $("option:last", $sd).text());
                            }
                        }
                    });
            });
        });
    };
})(jQuery);

Es scheint aber leider nicht zu funktionieren, da ich mit Sicherheit einen Denkfehler habe... der Code lügt nicht ;-)
Ich erhalte beim alert nur den Namen der/des ersten Variable/Elements und die Restlichen geben undefined aus.

Der Hintergrund des Ganzen ist, dass ich versuche die letzte Option: "31" von Selectbox-Tag zu entfernen, wenn der User den Monat: 4, 6, 9 oder 11 auswählt, da diese nur 30 Tage haben...

HTML-Code:
HTML:
<select size="1" name="u_Day" class="day">
    <option value="" selected="selected">dd</option>
    <option value="01">1</option>
    ....
    <option value="31">31</option>
</select>

<select name="u_Month" class="month">
    <option value="" selected="selected">mm</option>
    <option value="01">1</option>
    ....
    <option value="12">12</option>
</select>

<select name="user_year" id="year">
    <option value="" selected="selected">yyyy</option>
    <option value="1999">1999</option>
    ...
    <option value="1930">1930</option>
</select>

<select name="u_title" class="anrede">
    <option value=""></option>
    <option value="mann">Mann</option>
    <option value="frau">Frau</option>
</select>

Das Ergebnis ist, dass die letzte Option von dem Anrede-Selectbox entfernt wird und nicht die vom Tag-Selectbox.

Es ist mir klar, dass ich hier - vor allem - einen Denkfehler habe... ich kann leider so auf die Schnelle es fixieren und ich würde es auf der anderen Seite so gerne dynamisch und elegant hinbekommen statt den Namen oder Klassen-Selector zu verwenden, um auf den Monat-Selectbox zuzugreifen.

Vielen Dank und Gruß
Messmar
 
Du musst die Variablendeklaration außerhalb der Funktion definieren, da es sich sonst – also momentan – nur um lokale Variablen handelt, die nur innerhalb der Funktion definiert sind.
 
Hi Cookie!

Danke! ich muss ehrlich sagen, dass ich die Gedanken bzgl. Lokal und Global-Deklaration hatte, aber ich habe es auf der anderen Seite nicht richtig gemacht.

Jedenfalls, es scheint jetzt ein Teil des Ergerbnisses zu liefern, und zwar das Entfernen des letzten Items vom Tag-Selectbox.. nun der macht's drei mal so, dass ich am Ende im Tag-Select die Option: 28 als Letzte habe.

Das ist ja auch nach dem Code hier logisch, da er für jeden Selectbox:
Code:
.each(fuction(){....});
ein item vom Tag entfernt...

Evtl. bastle ich es danach mit switch/case... oder würdest Du was anderes vorschagen? ;-)

Besten Dank
Messmar
 
Klasse!

das ist echt sehr Hilfreich, da ich auch vorhatte, die Abfrage für Schaltjahr zu bauen.

P.S. ich werde es aber auch nicht kopieren, sondern eher mich danach orientieren bzw. wegweisend sozusagen ;-)

Vielen Dank! und Grüße
Messmar
 

Neue Beiträge

Zurück