我正在調試一個問題,在我的JavaScript代碼中沒有正確設置變量。經過一些研究,我發現變量沒有被填充,因爲它從一個不存在的事件屬性中獲取它的值。在這種情況下,它從event.currentTarget派生出它的值,該值奇怪地爲null。event.currentTarget問題
所以我現在有點困惑。我總是儘管event.currentTarget總是指向觸發事件的偵聽器的任何元素。那麼在什麼情況下event.currentTarget實際上是空的?
我正在調試一個問題,在我的JavaScript代碼中沒有正確設置變量。經過一些研究,我發現變量沒有被填充,因爲它從一個不存在的事件屬性中獲取它的值。在這種情況下,它從event.currentTarget派生出它的值,該值奇怪地爲null。event.currentTarget問題
所以我現在有點困惑。我總是儘管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.
}
});
})
我注意到了同樣的事情。我在使用'event'完成函數之前不會「等待」AJAX調用來「修復」它,但這並不總是一個好的解決方案。我想知道爲什麼會發生這種情況,以防將來遇到這種情況。對於記錄來說,一旦AJAX調用完成,'event.currentTarget'就爲空,並且奇怪的是'event.target'仍然使用與調用事件時相同的元素來填充。我使用角度,所以也許棱角分明,在你的情況下,jQuery,改變了事件? – trysis
在異步操作之後管理事件時也是如此。 –
如果以編程方式觸發事件或者您使用的是較舊的IE版本,它將是'undefined'或'null'。 –
下面是一個令人驚歎的演示,展示瞭如何以及何時設置所有這些事件屬性:http://liouh.com/jsevents/ –
如果您還沒有做過,我會建議使用類似jQuery的庫進行事件處理,以避免遇到問題不同的瀏覽器設置不同的屬性。 –