我有一个带有锚标签的元素列表,我在悬停时动态填充其 href。这是我的绑定代码:
$('.charts-container').on('mouseenter', '.track', function(e) {
Itunes.populateDownloadLink(e);
}
以下是触发事件时触发的代码:
var ITunes = {
populateDownloadLink: function(e) {
e.preventDefault();
trackDownloadLink = jQuery(e.currentTarget).find('.itunes-download a');
if (trackDownloadLink.attr('href') == '#') {
apiURL = ITunes.getApiUrl(trackDownloadLink);
// retrieve iTunes download link from iTunes API
jQuery.getJSON(apiURL, function(data) {
if (data.results.length > 0) {
trackDownloadLink.attr('href', data.results[0].trackViewUrl);
}
});
}
这在大多数情况下都有效,除非我在元素之间快速悬停。有时,当这种情况发生时,链接似乎会变得混乱。例如,当我快速将鼠标悬停在另一个元素上方时,另一个元素上方的元素将具有由其下方的元素生成的链接。似乎存在某种竞争条件,其中元素采用生成的第一个 URL,即使它不是为其生成 URL 的元素。我觉得这很奇怪,因为我使用e.currentTarget
的是 ,据我了解,它应该始终指代函数绑定到的元素,而不是鼠标当前所在的位置,甚至是触发要注册的事件的确切元素。