Ваш вызов $ .get требует времени, чтобы получить данные и отобразить новый HTML.Но ваш другой javascript все еще работает.Таким образом, когда вы пытаетесь присоединить прослушиватели событий, есть нули Div, к которым нужно присоединиться.
Это не относится к будущим div.Все будущие элементы должны иметь добавленных слушателей после того, как они находятся на странице.Ниже вы можете увидеть, как мы ожидаем их добавления на страницу, , затем мы добавляем к ним слушателей.
$(document).ready(function() {
try {
$.get(url, function(result) {
$.each(result.data, function(i, rowElement) {
$('#main').append(`
<div class="divHover">
<label class="playlist-name">${this.name}</label>
<div class="playlistCon">
<div class="playlist-all-btn">
<button class="deletePL-btn"><img class="deletePL-img" src="IMG/delete.png"></button>
<button class="editPL-btn"><img class="editPL-img" src="IMG/edit.png"></button>
<button class="playPL-btn" id='${this.id}'><img class="playPL-img" src="IMG/play.png"></button>
</div>
</div>
</div>
`);
});
// .each is done, all html is rendered
var number_divs = $(".playlistCon").length;
console.log(`But now... there are ${number_divs} divs to listen for hover on!`);
// NOW I can attach listeners to them
$(".playlistCon").hover(function() {
$(this).parent().find('.playlistCon').css("opacity", "1");
$(this).parent().find('.playlist-all-btn').css("display", "block");
},
function() {
$(this).parent().find('.playlistCon').css("opacity", "0.5");
$(this).parent().find('.playlist-all-btn').css("display", "none");
});
});
} catch (err) {
alert(err.toString());
}
});
var number_divs = $(".playlistCon").length;
console.log(`Right now there are ${number_divs} divs to listen for hover on.`);
В качестве альтернативы, вы можете подключить одного слушателя к родительскому div и использовать event delegation
для выполнения действий.Это будет относиться к будущему HTML! Читайте о делегировании событий здесь.