Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Скопировать обработчики событий с одного элемента на другой. (https://javascript.ru/forum/events/12448-skopirovat-obrabotchiki-sobytijj-s-odnogo-ehlementa-na-drugojj.html)

Jurasmi 18.10.2010 13:55

Скопировать обработчики событий с одного элемента на другой.
 
Есть html-элемент на странице (например div).
На нём висят разные обработчики событий (их набор заранее не известен).
Прямого доступа к коду этих обработчиков нет.

Необходимо динамически создать элемент так, чтобы на нём висели те же самые обработчики тех же самых событий.

Что я делал:
Узнал, что нет способа узнать какие именно обработчики висят на элементе (если только они не назначены через атрибут), значит и скопировать их не получится.

Узнал, что можно сделать так:
<div id="first">first</div><br/>
<div id="simulate">simulate</div>

var first = document.getElementById('first'),
	simulate = document.getElementById('simulate'),
	fHandler = function(){
		console.log('ok');
	};
	
first.onclick = fHandler;

//при наведении мышки на элемент "simulate" срабатывает обработчик 'onclick' элемента "first"
simulate.onmouseover = function(){
	var evt = document.createEvent("MouseEvents");
	evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
	first.dispatchEvent(evt);
}

здесь не происходит "копирования" обработчиков, а просто возбуждается :yes: событие исходного "донорского" элемента, значит удалить этот элемент нельзя - не сработает обработчик, к тому же я не знаю наперед список отрабатываемых событий.

Господа, нужна ваша помощь.
Как решить задачу?

vladlen 24.10.2010 01:59

а. прочитать все маны на этом сайте, признаться себе что чайник и прочитать все повторно.
б. клонирование, но без "а" этого делать не стоит.
в. получить указатель на целевую хрень, получить указатель на свою хрень и подвесить эвенты целевой хрени на свою хрень. Что там було не важно.
Ничего не понял? Тогда только "а".

Jurasmi 08.11.2010 15:24

Цитата:

Ничего не понял? Тогда только "а".
Что-то понял, но не всё.

Цитата:

прочитать все маны на этом сайте, признаться себе что чайник и прочитать все повторно.
Хороший совет, тем более что я чайник :)

Цитата:

клонирование, но без "а" этого делать не стоит
Клонировать что HTML-элемент? Функцией "cloneNode()" ? Разве она скопирует обработчики событий (если тоько они не лежат в виде атрибутов)?

Цитата:

получить указатель на целевую хрень, получить указатель на свою хрень и подвесить эвенты целевой хрени на свою хрень.
Как перебирать обработчики если я не знаю заранее на какие события они обрабатывают?
Можно ли узнать какие события обрабатываются в этом элементе (как получить список обработчиков, а точнее событий), а не всех возможных?

vladlen 10.11.2010 18:03

Цитата:

Сообщение от Jurasmi (Сообщение 78039)
Можно ли узнать какие события обрабатываются в этом элементе (как получить список обработчиков, а точнее событий), а не всех возможных?

А все перебрать? Религия не позволяет?
Возможно и есть варианты, но я пока не компетентен в данном вопросе. Если нужно задачу решить, то всегда есть решение "в лоб". За красотой в гугл ;)


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