我创建了以下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();
当我点击该元素时,会触发点击事件,但$(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 :(得分:2)
Arrow functions
not 绑定自己的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");
});
答案 1 :(得分:2)
另一个答案可能是更现实的答案,但要注意,您也可以停止使用this
并执行
$("#clients-table tbody tr").click(evt => {
let $this = $(evt.currentTarget);
// ...
});