Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   События динамично созданных кнопок (https://javascript.ru/forum/events/50194-sobytiya-dinamichno-sozdannykh-knopok.html)

devastor 16.09.2014 11:19

События динамично созданных кнопок
 
Добрый день, друзья!
Столкнулся с проблемой: события для динамично созданных объектов не работают
//info = [id, start, finish, time, distance, price];
//динамически создаю объекты
function echo(info) {
	var i = 0;
	var Form = document.getElementById('fms');
	var Div = document.createElement('div');
	Div.id = 'main';
	Form.appendChild(Div);
	var id = info[info.length-1];
	while (info.length > 0 ){
		i++;
		var field = info.pop(); 
		var Inner = document.createElement('input');
		Inner.id = 'elem'+id+i;
		Inner.name = 'elem'+id;
		Inner.size = field.length;
		Inner.value = field;
		Div.appendChild(Inner);
	}
	var DeleteLink = document.createElement('input');
	DeleteLink.type = 'button';
	DeleteLink.value = 'Готово';
	DeleteLink.id = 'DelBut';
	DeleteLink.name = id;
	Div.appendChild(DeleteLink);
}

События нужны по нажатию на кнопке с id='DelBut' при этом нужно получать значение из текущей нажатой кнопки, например name
//не работает
var elt = document.getElementById("DelBut"); 
    elt.onclick = function() { console.log(this.name); }
//не работает
	$("#DelBut").click(function () {
		console.log('jr');
		console.log($(this).text());
    });

ksa 16.09.2014 11:33

Цитата:

Сообщение от devastor
события для динамично созданных объектов не работают

На момент "навешивания" событий тех элементов просто нет.
Решение:
- навешивать события при создании
- использовать делегирование событий

devastor 16.09.2014 11:49

Цитата:

Сообщение от ksa (Сообщение 330803)
На момент "навешивания" событий тех элементов просто нет.
Решение:
- навешивать события при создании
- использовать делегирование событий

Можно ссылку на какой-нибудь мануал или пример, что бы разобраться?
Спасибо

krasovsky 16.09.2014 12:59

Используй метод .on() вместо .click(). (делегирование)
Либо создай какую нибудь универсальную функцию, которая навешивает твой обработчик на вновь создаваемые элементы

ksa 16.09.2014 14:36

Цитата:

Сообщение от devastor
Можно ссылку на какой-нибудь мануал или пример, что бы разобраться?

http://javascript.ru/tutorial/events...-obrabotchikov
http://api.jquery.com/on/

devastor 16.09.2014 16:51

Спасибо, получилось повесить событие при создании элемента
DeleteLink.onclick = function (){//выполняемые действия};

Отличный форум, очень помогаете, ребята!

Vlasenko Fedor 16.09.2014 23:40

быстрее клонировать элементы и лучше использовать fragment
а обработчик можно навесить на существующий родитель
небольшой пример http://jsfiddle.net/vlasenkofedor/hyQnb/


Часовой пояс GMT +3, время: 06:03.