2016-05-23 4 views
1

Kann jemand erklären, warum eine dieser Codeversionen funktioniert und die andere fehlschlägt?Das Zuweisen eines jquery-Objekts zu einer Variablen funktioniert nicht wie erwartet

funktioniert das nicht:

var classForSelectedElement = "hightlight"; 
var prevSelect = $(".form-element"); 
var $selectedElement = $("div").on("click", ".form-element",function(e){ 
    prevSelect.removeClass(classForSelectedElement); 
    $(this).addClass(classForSelectedElement); 
}); 

Während dies funktioniert: Warum

var classForSelectedElement = "hightlight"; 
var $selectedElement = $("div").on("click", ".form-element",function(e){ 
    $(".form-element").removeClass(classForSelectedElement); 
    $(this).addClass(classForSelectedElement); 
}); 

?

+0

Warum verwenden Sie Ereignisdelegierung? Wenn Sie nicht wissen, was das ist, müssen Sie definitiv darüber lernen (da Sie es verwenden). Wenn du weißt, was es ist, hast du im Grunde schon deine Antwort. –

+0

@bibangamba [This] (http://stackoverflow.com/a/24053931/4790490) kann Ihre Anfrage beantworten. – Hearty

Antwort

2

Angenommen, die Elemente .form-element werden nach dem Laden dynamisch an das DOM angehängt (aufgrund der Verwendung eines delegierten Ereignishandlers), funktioniert das erste Beispiel nicht, da Sie beim Laden der Seite versuchen, die .form-element abzurufen Sie existieren.

+0

Sie sind völlig richtig (dynamisch angehängt DOM). hatte nicht realisiert, was los war. Vielen Dank! – bibangamba

+0

Kein Problem, froh zu helfen. –