为什么我的函数中 event.currentTarget 为 null?

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

我正在调试 JavaScript 代码中的一个问题,其中一个变量未正确设置。经过一番研究,我发现该变量没有被填充,因为它从不存在的事件属性中获取其值。在本例中,它的值来自

event.currentTarget
,但奇怪的是,它为空。

所以我现在有点困惑。我总是认为

event.currentTarget
总是指向持有触发事件的侦听器的任何元素。那么在什么情况下
event.currentTarget
实际上会为空呢?

javascript dom-events
1个回答
7
投票

问题在于事件的处理方式。正如您在下面看到的,事件对象本身不仅要由其各自的处理函数处理,而且还要由其各自的处理函数处理。它还将由另一个函数进行处理,该函数仅在处理程序中进行的 AJAX 调用成功返回时才被调用。然而,一旦成功函数在 AJAX 调用下执行,事件对象就会丢失一些上下文,即它的 currentTarget 属性。我认为这是因为一旦浏览器开始在 success 函数中执行代码,我们就不直接位于处理程序的范围内。

$('#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.
       }
    });

})
© www.soinside.com 2019 - 2024. All rights reserved.