2016-12-21 6 views
1

Я создал следующий NodeJs модуль:

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"); 
    }); 
} 

и моя Browserify точка входа выглядит следующим образом:

"use strict"; 

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

test(); 

Когда я нажимаю на элемент, срабатывает событие click, но $(this) - undefined. Вот результат различных 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 

Любая идея, почему?

+0

Возможного дубликат [Использование JQuery $ (это) с ES6 стрелками функций (лексический это связывание)] (HTTP: // stackov erflow.com/q/27670401/218196) –

ответ

2

Arrow functions сделать не связать свой собственный this аргумент - именно поэтому вы получаете undefined - так что вы можете использовать обычный режим функции:

$("#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

Если это так, то как использовать это в функциях стрелки? – Jai

+0

Спасибо! И спасибо за ссылку! – acanana

+0

@Jai хорошо мы можем использовать обычную 'function() {}' .. просвещать нас, если есть другой способ, которым вы знаете? :) – kukkuz

2

Другой ответ, вероятно, является более реалистичным, но обратите внимание, что вы могли бы также прекратить использование this и сделать

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

    // ... 
}); 
+0

Интересно, спасибо за предложение! – acanana