2016-08-02 4 views
0

Ich möchte nur wissen, ob es eine gute Übung ist, einen Click-Event-Listener in einer Funktion wie im folgenden Beispiel zu haben. (Versuchen Sie nicht zu verstehen, was der Code tut, ich wollte nur ein Beispiel für eine Situation zeigen, wo ein Click-Ereignis in einer Funktion)Ist es eine gute Übung, einen Ereignis-Listener innerhalb einer Funktion hinzuzufügen, die Parameter enthält?

function someFn(classClickedBtn, popupId) { 

      $(classClickedBtn).click(function(e) { 
       e.preventDefault(); 
       var active = "active"; 
       var mainClass = ".dialogBox"; 

        if ($(popupId).hasClass(active)) { 

         $(popupId).removeClass(active); 

        }else{ 

         for (var i = 0; i< $(mainClass).length; i++) { 
         if ($(mainClass).hasClass("active")) { 
         $(mainClass).removeClass("active"); } } 

         $(popupId).addClass(active); 

        } 

      }); 

     } 


     someFn(".btn1", "#popup"); 

     someFn(".btn2", "#popup"); 
+1

Es ist nicht falsch, aber es kann zu Fehlern führen leicht. Ich würde '$ (triggerBtnClass) .off (" click.namespace ") vorschlagen on (" click.namespace ", function (e) {...});' um sicherzustellen, dass selbst wenn Sie die Funktion wiederholt aufrufen, Es wird nur ein Ereignis-Listener hinzugefügt. –

Antwort

0

Wenn Ihr Zweck ist es, einen Event-Handler für ‚Klick anbringen 'event of' triggerBtnClass ', nur wenn etwas deine Funktion vorher aufruft, also ja.

0

Ich bin in Ordnung mit dem Aufruf des Zuhörers aus Ihrer Funktion. Sie können sich die Dinge ein wenig erleichtern, indem Sie die Funktion einmal mit allen enthaltenen Argumenten aufrufen. Sehen Sie sich den Refaktorcode unten an. Ich verwende ein Objektliteral, um die Funktionsargumente zu speichern und die Funktion einmal aufzurufen, wobei das Objekt als einzelner Parameter übergeben wird.

function someFn(fn_data) { 
 
    $(fn_data.btns).on("click", function(e) { 
 
    var active = "active"; 
 
    var mainClass = $(".dialogBox"); 
 
    var popup = $(fn_data.popupId); 
 
    
 
    e.preventDefault(); 
 
    
 
    if (popup.hasClass(active)) { 
 
     popup.removeClass(active); 
 
    } else { 
 
    
 
     for (var i = 0; i < mainClass.length; i++) { 
 
     if (mainClass.hasClass("active")) { 
 
      mainClass.removeClass("active"); 
 
     } 
 
     } 
 

 
     popup.addClass(active); 
 
    } 
 
    }); 
 
} 
 

 
someFn({ 
 
    btns: ".btn1, .btn2", 
 
    popupId: "#popup" 
 
});
#popup { 
 
    margin-top: 1em; 
 
} 
 

 
#popup.active:after { 
 
    content: 'Popup active!'; 
 
} 
 

 
#popup:after { 
 
    content: 'Popup not active!'; 
 
    color: #555; 
 
    display: block; 
 
    height: 20px; 
 
    white-space: nowrap; 
 
    margin-top: 10px; 
 
    border: 1px solid orange; 
 
    padding: 0.5em 1em; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button class="btn1">button 1</button> 
 
<button class="btn2">button 2</button> 
 
<div id="popup">popup goes here</div>

Verwandte Themen