Я попытаюсь объяснить свою проблему: У меня есть сайт, на котором пользователь динамически добавляет элементы. Все они принадлежат классу «toBuy». Когда новый элемент добавляется к этому классу, мне нужно прикрепить обработчик кликов только к этому элементу, но не ко всем остальным. Чтобы мой код был чистым, я хочу иметь функцию, которая выполняет эту работу. Вот что я пробовал:jquery: как добавить обработчик события в динамически добавленный элемент без добавления его в существующий элемент снова
это как добавляется материал:
$("#addItemButton").click(function(){
var item= $('#item').val();
$('#item').val("");
var quantity= $('#quantity').val();
$('#quantity').val("");
var comment=$('#addComment').val();
$('#addComment').val("");
//construct new html
var newitem="<div class='toBuyItem'><div class='item'>";
newitem+=item;
newitem+="</div><div class='quantity'>";
newitem+=quantity;
newitem+="</div><div class='comment'><img src='img/comment";
if(comment==""){
newitem+="_none"
}
newitem+=".png' alt='Comment'></div><div class='itemComment'>"
newitem+=comment;
newitem+="</div></div>";
$("#toBuyItems").prepend(newitem);
toggle("#addItemClicked");
initializeEventListeners();
});
, то это функция initializeEventListeners (которую я также запустить при загрузке страницы, чтобы существующие элементы имеют события обработчики уже:
function initializeEventListeners(){
$(".toBuyItem").click(function(){
console.log($(this).html());
console.log($(this).has('.itemComment').length);
if($(this).has('.itemComment').length != 0){
console.log("toggling");
$(this).addClass("toggling");
toggle(".toggling .itemComment");
$(this).removeClass("toggling");
}
});
}
function toggle(item){
$(item).slideToggle(500);
}
сейчас, видимо, то, что происходит в том, что при добавлении нового элемента существующие элементы получают новый обработчик событий для нажатия (так они его дважды) это означает, что они включать и выключать с помощью всего один. Наверное, это просто прост, но я не могу т обернуть мою голову вокруг него ....
EDIT: так это работает:
$(document).on('click', '.toBuyItem', function(){
if($(this).has('.itemComment').length != 0){
console.log("toggling");
$(this).addClass("toggling");
toggle(".toggling .itemComment");
$(this).removeClass("toggling");
}
});
. см. выше – suMi
спасибо. это делает работу! – suMi
@suMi Обновленный код в вопросе. – Tushar