2016-12-21 3 views
1

Ich habe folgendes NodeJs Modul:

import $ from 'jquery'; 

module.exports =() => { 

    $("#clients-table tbody tr").click(() => { 

    let $this = $(this); 

    console.log($this); 
    console.log($(this)); 
    console.log($(this).attr("class")); 
    console.log($("#clients-table tbody tr").attr("class")); 
    console.log("end"); 
    }); 
} 

und mein Browserify Einstiegspunkt sieht wie folgt aus:

"use strict"; 

import $ from 'jquery'; 
import test from './test'; 

test(); 

Wenn ich auf das Element klicke, wird das Klickereignis ausgelöst, aber $(this) ist undefined. Hier ist das Ergebnis verschiedener console.logs:

test.js:9 he.fn.init {} 
test.js:10 he.fn.init {} 
test.js:11 undefined 
test.js:12 test 
test.js:13 end 

Jede Idee, warum?

+0

Mögliche Duplikat [mit jQuery $ (this) mit ES6 Pfeil Funktionen (lexikalischer diese Bindung)] (http tun: // stackov erflow.com/q/27670401/218196) –

Antwort

2

Arrow functions do nicht binden ihre eigene this Argument - das ist, warum Sie undefined erhalten - so können Sie die normale Funktion Modus verwenden:

$("#clients-table tbody tr").click(function() { 

    let $this = $(this); 

    console.log($this); 
    console.log($(this)); 
    console.log($(this).attr("class")); 
    console.log($("#clients-table tbody tr").attr("class")); 
    console.log("end"); 
    }); 
+0

Wenn das der Fall ist dann wie man das in den Pfeilfunktionen benutzt? – Jai

+0

Danke! Und danke für den Link! – acanana

+0

@Jai Nun, wir können die normale 'function() {}' verwenden. Erleucht uns, wenn es anders geht, weißt du? :) – kukkuz

2

Die andere Antwort ist wahrscheinlich die realistischere, aber zu beachten Sie, könnten Sie auch mit this stoppen und

$("#clients-table tbody tr").click(evt => { 
    let $this = $(evt.currentTarget); 

    // ... 
}); 
+0

Interessant, danke für den Vorschlag! – acanana