我试图记录每次用户更改我网页上的文本输入的时间。我正在使用以下内容:
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()处理的事情。
有人可以建议我在这里出问题了,还是应该去哪里找?谢谢。
错误是因为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
});
}