Javascript 所有内容都来自本地主机时的跨原点对象

Javascript 所有内容都来自本地主机时的跨原点对象,javascript,jquery,flask,Javascript,Jquery,Flask,我试图记录每次用户更改我网页上的文本输入时的情况。我正在使用以下命令: function formInit(socketObject) { $('input:text').change( (eventObject) => { console.log(document.domain); console.log(JSON.stringify($(this))); //... send stuff via socketObject }); } 我正在从$(doc

我试图记录每次用户更改我网页上的文本输入时的情况。我正在使用以下命令:

function formInit(socketObject) {
  $('input:text').change( (eventObject) => {
    console.log(document.domain);
    console.log(JSON.stringify($(this)));
    //... send stuff via socketObject
  });
}
我正在从
$(document).ready()调用它。我在第四行得到以下错误,记录$(此):

SecurityError:拒绝访问跨源对象上的属性“toJSON”的权限

尽管事实上,
console.log(document.domain)
从脚本和调用它的主文档返回
localhost
。我的flask服务器在localhost上唯一没有提供的东西是几个库(jquery、socketio、cleave)和bokeh图表中的一些组件,我很确定它们不符合
input:text
,当然也不是我在调试中一直使用的东西


有人能告诉我哪里出了问题,或者我应该去哪里找吗?谢谢。

错误是因为
不是您所期望的
输入:text
元素,因为您使用的是箭头函数,因此无法维护词法范围。您需要将箭头函数更改为匿名函数:

function formInit(socketObject) {
  $('input:text').change(function() {
    // 'this' now refers to the element which raised the event
  });
}
function formInit(socketObject) {
  $('input:text').change(e => {
    // 'e.target' now refers to the element which raised the event
  });
}
或者保留arrow函数,但从事件中获取对元素的引用,该事件作为处理程序函数的参数提出并提供:

function formInit(socketObject) {
  $('input:text').change(function() {
    // 'this' now refers to the element which raised the event
  });
}
function formInit(socketObject) {
  $('input:text').change(e => {
    // 'e.target' now refers to the element which raised the event
  });
}
除了错误之外,字符串化整个jQuery对象有点奇怪。最好只提取所需的相关属性,如下所示:

函数formInit(socketObject){
$('input:text')。更改((e)=>{
console.log(document.domain);
console.log({
id:e.target.id,
价值:即目标价值
//这里的其他物业。。。
});
//通过socketObject发送内容。。。
});
}

谢谢。我假设arrow函数只是匿名函数声明之上的语法糖。显然不是!字符串化对象仅用于调试目的,以确保我得到了正确的对象-我现在用$(this).val()替换它。