我正在调试我的 javascript 代码中的一个问题,其中一个变量没有正确设置。经过一番研究,我发现该变量没有被填充,因为它从一个不存在的事件属性中获取其值。在这种情况下,它从 event.currentTarget 派生它的值,奇怪的是它是 null。
所以我现在有点困惑。我总是认为 event.currentTarget 总是指向任何元素持有触发事件的侦听器。那么在什么情况下 event.currentTarget 实际上会为空呢?
我正在调试我的 javascript 代码中的一个问题,其中一个变量没有正确设置。经过一番研究,我发现该变量没有被填充,因为它从一个不存在的事件属性中获取其值。在这种情况下,它从 event.currentTarget 派生它的值,奇怪的是它是 null。
所以我现在有点困惑。我总是认为 event.currentTarget 总是指向任何元素持有触发事件的侦听器。那么在什么情况下 event.currentTarget 实际上会为空呢?
好吧,我终于想通了。
问题在于事件的处理方式。正如您在下面看到的,事件对象本身不仅要由其各自的处理函数处理;它也将由另一个函数处理,该函数仅在处理程序中进行的 AJAX 调用成功返回时调用。但是,一旦成功函数在 AJAX 调用下执行,事件对象就会丢失它的一些上下文,即它的 currentTarget 属性。我认为这是因为一旦浏览器开始在成功函数中执行代码,我们就不直接在处理程序的范围内。
$('#element').click(function(e) {
// bunch of lines of code here
$.ajax({
type: 'POST',
url: // url,
...,
success: function(response) {
// more lines of code here
callAnotherFunction(e);
// When we invoke the above function, we pass the event in as a
// parameter, but the event has already lost some of its context
// due to scope change.
}
});
})