一切都来自本地主机的跨源对象

问题描述 投票:0回答:1

我试图记录每次用户更改我网页上的文本输入的时间。我正在使用以下内容:

function formInit(socketObject) {
  $('input:text').change( (eventObject) => {
    console.log(document.domain);
    console.log(JSON.stringify($(this)));
    //... send stuff via socketObject
  });
}

我正在从$(document).ready()打来的电话。我在第四行收到以下错误,该错误记录了$(this):

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

尽管console.log(document.domain);从脚本和被调用的主文档中都返回了localhost。本地主机上没有从我的Flask服务器提供的唯一服务是几个库(jquery,socketio,cleave)以及bokeh图表中的某些组件,我敢肯定它们不符合[C0 ],当然还不是我在调试中一直进行.change()处理的事情。

有人可以建议我在这里出问题了,还是应该去哪里找?谢谢。

javascript jquery flask bokeh
1个回答
0
投票

错误是因为input:text不是您所期望的this元素,因为您使用的是箭头功能,因此无法保持词汇范围。您要么需要将arrow函数更改为匿名函数:

input:text

或者保留箭头功能,但从引发的事件中获取对元素的引用,并提供给处理程序函数作为参数:

function formInit(socketObject) {
  $('input:text').change(function() {
    // 'this' now refers to the element which raised the event
  });
}

除了错误,对整个jQuery对象进行字符串化还有些奇怪。最好仅提取所需的相关属性,如下所示:

function formInit(socketObject) {
  $('input:text').change(e => {
    // 'e.target' now refers to the element which raised the event
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.