Как обрабатывать по клику динамически созданные элементы?

Здравствуйте, подскажите пожалуйста в чем ошибка не получается обработать событие клика по созданным элементам.
var audio;
var on = "Включить аудио";
$("#audio").text(on);
var list =[];
$("#audio").click(function(){
if($(this).text() == on){
//включаем плеер и запускаем аудио фай, сообщающий что плеер включен
audio = new Audio("/audio/audio-on.mp3");
audio.play();
$(this).text('Выключить аудио');
//получаем список аудиофайлов
$.getJSON("playlist", function(data){
$(".player").html(""); //очищаем список
$.each(data, function(key, val){
list = $(".player").append('' + val + '');
});
});
}else{ // выключаем плеер
$(".my-new-list").remove();
if(audio != null){
audio.pause();
}
audio = new Audio("/audio/audio-off.mp3"); //Проиграем звук что плеер отключен
audio.play();
$(this).text(on);
}
});

// эта функция не работает
list.click(function(){
audio.pause();
audio = new Audio("/audio/" + this.text());
audio.play();
});

Нужно чтоб по выбраному элементу проигрывался соответствующий аудиофайл. Когда прописываю элементы напрямую в html странице, то все нормально работает.
В чем ошибка?
  • Вопрос задан
  • 182 просмотра
Решения вопроса 1
@RybinDen Автор вопроса
Все сделал, вот работающий код, вторую функцию удалил, обработку сделал в первой.
var audio;
var on = "Включить аудио";
$("#audio").text(on);
$("#audio").click(function(){
if($(this).text() == on){
//включаем плеер
audio = new Audio("/audio/audio-on.mp3");
audio.play();
$(this).text('Выключить аудио');
$.getJSON("playlist", function(data){
$(".player").html(""); //очищаем список
$.each(data, function(key, val){
$(".player").append("" + val + "");
});
$(".my-new-list").on("click", function(){
audio.pause();
audio = new Audio("/audio/" + $(this).text());
audio.play();
});

});

}else{
$(".my-new-list").remove();
if(audio != null){
audio.pause();
}
audio = new Audio("/audio/audio-off.mp3");
audio.play();
$(this).text(on);
}
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
iiiBird
@iiiBird
Пока ты спишь - твой конкурент совершенствуется
замени все click с
list.click(function(){
на
$(document).on('click', list, function(){
Ответ написан
@justdealman
Используйте jQuery .delegate()

$('html').delegate(list, 'click', function() {
audio.pause();
audio = new Audio("/audio/" + this.text());
audio.play();
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы