2016-03-21 11 views
0

Ich versuche, einen Pfeil Funktion zu verwenden, und ich bin immer einen Fehler, wenn ich eine VariableWarum funktioniert meine Pfeilfunktion beim Abrufen eines bestimmten Elements nicht?

let cardColor; 
let fontColor; 

let toggleSidebarInfo =() => { 
    let colors; 
    $('.client-director, .person-link, .card-picture').click((evt) => { 
     employeeId = evt.target.id; 
     ///// FOCUS ON THIS PART ////// 
     colors = $(this).hasClass('card-picture') ? 
      (cardColor = $(this).next().css('backgroundColor'), 
      fontColor = $(this).next().css('color')) : 
      (cardColor = $(this).css('backgroundColor'), 
      fontColor = $(this).css('color')); 
    ///////////////////////// 
     compareId(employeeId); 
    }); 
}; 

wenn ich cardColor von fontColor undefined ich log Konsole zuweisen versuchen, wie ich

.click((evt) => { . . . });

tue

aber wenn ich es die reguläre Art und Weise

.click(function(evt) { . . . });

dann funktioniert alles einwandfrei.

Was fehlt mir?

+2

Weil Sie sich auf 'this' beziehen? Versuchen Sie nicht, eine Pfeilfunktion zu verwenden, wo dies nicht angebracht ist. – Bergi

+0

@Bergi also was soll ich anstelle von '$ (this)' verwenden? Ich dachte, es wäre ein besonderes Feature von jQuery. Wie eine andere Art von dies auf jQuery-Objekte angewendet – NietzscheProgrammer

+1

Während die einfachste Lösung ist, den richtigen Funktionstyp zu verwenden, können Sie auch 'evt.currentTarget' verwenden, um das gebundene Element zu erhalten. Obwohl ich die Pfeilfunktion nicht verwenden würde, wenn Sie nicht ausdrücklich das "this" der äußeren lexikalischen Umgebung benötigen. –

Antwort

0

Arrow functions wird seine lexical scope automatisch in es binden, so in Ihrem Fall wird die this innerhalb der Event-Handler nicht die Elemente des Event-Handler zeigen.

Verwendung von arrow functions Ihre machen event binding knapp unter wie

$('.client-director, .person-link, .card-picture').click(function(evt){ 

}.bind(this)); 

hier während Ereignisbindung, Pfeil Funktionen ungeeignet ist. Die beste Option ist, mit normalen anonymen Funktionen zu gehen.

Beachten Sie auch, dass Sie den durch die Pfeilfunktion gebundenen Bereich in keiner Weise außer Kraft setzen können.

+0

Also was soll ich anstelle von '$ (this)' verwenden? Ich dachte, es wäre ein besonderes Feature von jQuery – NietzscheProgrammer

+0

@NietzscheProgrammer: Wir haben nicht gesagt, dass Sie '$ (this)' ändern sollten, wir sagten, Sie sollten wieder zu 'function' wechseln. – Bergi

+0

Ich habe deine Antwort nicht abgelehnt. Eigentlich funktioniert mein Code nur, indem er Funktion setzt, wenn du bind (this) am Ende setzt, wird es nicht funktionieren. – NietzscheProgrammer

Verwandte Themen