jQuery: private Methode mit einem optionalen Parameter

messmar

Erfahrenes Mitglied
Guten Abend zusammen!

ich habe eine gruppe von Checkboxen, die ich über den Parent-Fieldset anspreche und frage ab, ob mindestens eine gecheckt ist oder nicht... wenn Ja, dann blinde ich die Fehlermeldung aus.

Code:

Code:
    $(".checkOF05, .checkOF11, .checkOF13").bind({
            click:function(){
                if($(this).attr('class') === 'checkOF05'){
                    if($(".checkOF05 input:checked").length <= 0){
                        $('.checkOF05').next().html(msg);
                    }else{ 
                        $('.checkOF05').next().html('');
                    }
                }
                
                if($(this).attr('class') === 'checkOF11'){
                    if($(".checkOF11 input:checked").length <= 0){ 
                        $('.checkOF11').next().html(msg);
                    }else{ 
                        $('.checkOF11').next().html('');
                    }
                }
                ....
    });

Da ich mehrere Fälle auch habe und zwar mit Radio buttons, möchte ich das ganze über eine private Methode mit Parametern:

Code:
clean(param1, param2) {....}

machen und anschließend die Methode: clean(param1, param2); wobei der Parameter param2 - im Falle der Checkboxen - optional ist.... wird aber für die Radio buttons gebraucht und funkt. einwandfrei.

Private Methode:

Code:
    function clean(El, elErr){
            if(!elErr) elErr = null;
                alert('El: ' + El + 'elErr: ' + elErr);
            if(elErr === null) 
                El.next().html('');
            else 
                if(El.is(':checked')) El.nextAll(elErr).html('');
                       
    }

Hinweis: der folgende Fall mit: else ist für die Radio Buttos und funkt. bitte einfach ignorieren:

Code:
          else 
                if(El.is(':checked')) El.nextAll(elErr).html('');

Problem:

Wenn ich aber die Methode: clean() innerhalb der eventHandler:
Code:
click:function(){...}
anhand bind aufrufe, dann funkt. nicht und ich erhalte ne Fehlermeldung...


wobei, wenn ich es ohne die Methode: clean('.checkOF05'); aufrufe, sondern direkt:
Code:
     $('.checkOF05').next().html('')

dann funktioniert.

P.S das ganze ist innerhalb eines Plugins eingebettet.

der HTML Code:

HTML:
        <fieldset class="checkOF05">
              <input type="checkbox" name="user.CustomAttribute.OF05a" value="" class="radio_01" />
              <label class="labelTxt_01">Patisseries</label>

              <input type="checkbox" name="user.CustomAttribute.OF05b" value="" class="radio_02" />
              <label class="labelTxt_01">Chocolats</label>

              <input type="checkbox" name="user.CustomAttribute.OF05c" value="" class="radio_02" />
              <label class="labelTxt_01">Epicerie fine</label>

              <input type="checkbox" name="user.CustomAttribute.OF05d" value="" class="radio_02" />
              <label class="labelTxt_01">Vins, Champagnes</label>

              <input type="checkbox" name="user.CustomAttribute.OF05e" value="" class="radio_03" />
              <label class="labelTxt_02">Plats pr&eacute;par&eacute;s</label>
        </fieldset><label class="lbErr"></label>

Der letzte label
HTML:
<label class="lbErr"></label>
dient dazu den Fehler zu zeigen oder leer, wenn eine der Checkboxen aktiviert ist.

Wäre klasse, wenn Jemand ne Idee hätte oder mir helfen/mich auf meinen Denkfehler aufmerksam machen könnte...

Vielen Dank und Gruß
Messmar
 
Zuletzt bearbeitet:
Auch wenn es jetzt nicht genau das ist, was du wolltest, habe ich dir mal dein erstes Skript so überarbeitet, dass es kompakter ist und somit die Notwendigkeit einer solchen Funktion – wie du sie dir wünschst – beseitigt:
Javascript:
$(function () {
  $('.check0F05, .check0F11, .check0F13').on({
    'click': function () {
      if ($('input:checked', this).length === 0) {
        $(this).next().html(msg);
      } else {
        $(this).next().html('');
      }
    }
  });
});
 
Hallo,

danke schon mal!

Nur die umgebaute Funktion funktioniert nicht ;-) und ich bekomme leider keine Fehlermeldung...
weder über FireBug von Firefox noch über NetBeans.

Liegt es evtl. an die jQuery Version? ich verwende nämlich die 1.9.1

Ich wollte es von Anfang an über
Code:
    $(this)

machen, aber ich hatte es nicht hin bekommen wegen der Kombination zwischen $(this) und diesem hier:
Code:
input:checked

und deswegen war ich gezwungen es direkt via den class-selector:
Code:
$(".checkOF05 input:checked")
zu machen ;-(

Anyway, ich check es weiter, prüfe meinen Code und google ein wenig.

Ich poste das Ergebniss dann, wenn ich den Fehler lokalisieren kann.

Besten Gruß
Messmar
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück