我遇到了类似的问题,解决方案是从箭头函数切换到传统的命名函数。有时旧是金,但我确信某处有根本原因。
这没有用:
$(document).ready(() => {
$('#client_id').change(() => {
const clientId = $(this).val();
console.log(clientId);
});
});
控制台打印出错误:
类型错误:i.nodeName 未定义
进一步调查发现,'$(this)' 调用的是 window 对象而不是 select 元素。(正如上面 Rory 所指出的:https ://stackoverflow.com/a/8817193/5925104 )
这行得通。一个值被打印到控制台。
$(document).ready(() => {
$('#client_id').change(function changeClient() {
const clientId = $(this).val();
console.log(clientId);
});
});
更新
这是箭头函数的局限性之一。我引用,“没有自己的绑定到 this 或 super,不应该用作方法。” 由于上面的 jQuery 方法使用 'this' 上下文,因此在这种情况下应避免使用箭头函数,而应使用传统的函数表达式。这是支持这一点的文档。