Javascript.RU

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

Добавлять события к элементам - излюбленное занятие веб разработчиков.
Какие карявые коды обычно пишут умельцы?

Самый простой пример карявого добавления обработчика события элементу:

<div id="baran">кликни по мне</div>

<script type="text/javascript">
document.getElementById('baran').onclick=function () {
	alert('у вас получилось кликнуть');
}
</script>

каковы минусы такого добавления?
многие наверное подумают что удалить событие добавленное таким способом нельзя, на самом деле можно

<script type="text/javascript">
document.getElementById('baran').onclick=function () {}
</script>

Так вот, минусы такого добавления в карявости, а причина карявости поиск решения в гугле...
Впрочем основной минус тут это неудобство работы с множеством элементов и назначения им множества событий.
Дествительно, как добавить одному элементу несколько событий ?

Более сложный вариант реализации добавления и удалиния событий на javascript

<div id="baran">кликни по мне</div>

<script type="text/javascript">
		function addevent(obj, e, h) {
			if (obj.addEventListener) {
				obj.addEventListener(e, h, false);
			} else if (obj.attachEvent) {
				obj.attachEvent('on'+e, h);
			}
			else {
				obj['on'+e]=function() {
					h();
				};
			}
		},
		function delevent(obj, e, h) {
			if (obj.removeEventListener) {
				obj.removeEventListener(e, h, false);
			} else if (obj.detachEvent) {
				obj.detachEvent('on'+e, h);
			}
			else {
				obj['on'+e]=null;
			}
		}

var elem=document.getElementById('baran');
var eclick = function () {
	alert('у вас получилось кликнуть');
}

//добавляем событие
addevent(elem, 'click', eclick);

//удаляем событие
delevent(elem, 'click', eclick);
</script>

Наверняка вы уже знаете что назначаются события в осле (IE) немного по другому чем в других браузерах.
Именно по этому в коде выше нам постоянно приходется проверять Осел перед нами или нет?
И все равно даже такой более сложный код не решил нашей проблемы по добавлению нескольких событий одному элементу.

Чтож простой выход есть.

Чтобы не копаться в кодах и не кипятить мозги, перед тегом head подключим ScriptJava фреймворк, добавив вот такой код:

<script type="text/javascript" src="http://scriptjava.net/source/scriptjava/scriptjava.js"></script>

Теперь реализуем ранее расматриваемый пример более простым и удобным способом:

<div id="baran">кликни по мне</div>

<script type="text/javascript">
//добавляю событие onclick
var e = function(event){
	alert('у вас получилось кликнуть');
}
$$e.add($$('baran'),'click',e);
</script>

Вот так просто мы добавили событие, чтобы его удалить достаточно написать такой код

$$e.remove($$('baran'),'click',e);

но на этом возможности фрейм ворка не заканчиваются
добавим элементу 3 разных события а потом удалим второе событие

<div id="baran">кликни по мне</div>

<script type="text/javascript">
//добавляю события onclick
var e1 = function(event){
	alert('у вас получилось кликнуть 1');
}
var e2 = function(event){
	alert('у вас получилось кликнуть 2');
}
var e3 = function(event){
	alert('у вас получилось кликнуть 3');
}
$$e.add($$('baran'),'click',e1);
$$e.add($$('baran'),'click',e2);
$$e.add($$('baran'),'click',e3);

$$e.remove($$('baran'),'click',e2);
</script>

После запуска скрипта, мы увидим 2 сообщения, первое и третье.

+3

Автор: mihdan, дата: 1 декабря, 2011 - 09:45
#permalink

Изобретаете велосипед? Чем вас не устраивают jQuery, MooTools, ExtJS?


Автор: Гость (не зарегистрирован), дата: 1 декабря, 2011 - 11:13
#permalink

синтаксис


Автор: Гость (не зарегистрирован), дата: 23 июля, 2015 - 15:04
#permalink

В первом скрипте ошибка, запятая лишняя после первой функции.


Автор: Гость (не зарегистрирован), дата: 11 февраля, 2020 - 11:55
#permalink

Искал как программно добавлять и удалять события. Увидел у вас onclick=function (){}. Это то, что мне было нужно


 
Поиск по сайту
Другие записи этого автора
gordon freeman
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Популярные таги
Последние темы на форуме
Forum