Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Добавить функцию в обработчик onclick (https://javascript.ru/forum/events/2795-dobavit-funkciyu-v-obrabotchik-onclick.html)

slayer_tmb 12.02.2009 00:00

Добавить функцию в обработчик onclick
 
Подскажите кто сможет
Надо добавить к onclick функцию. Важно именно добавить к уже существующей.
Мои эксперименты остановились на следующем коде

originalhandler=menunodes[i].getAttribute('onclick');
if(typeof(originalhandler)=='function')
	{
		originalhandler.call();//срабатывает
		menunodes[i].onclick=function()	{	originalhandler.call(); MenuClick(this); };
		originalhandler.call();//срабатывает
	}
	else
	menunodes[i].onclick=function()	{	MenuClick(this); };


при клике говорит что не знает originalhandler ...

IIIEPJIOK 12.02.2009 12:15

Цитата:

Мои эксперименты остановились на следующем коде
Поэкспериментируйте с этим :)
<html>
	<script>
		function setOnClick(){
			document.getElementById('1').onclick = function(){onClickBtnOne.call()}			
		}
		function onClickBtnOne(){
			alert('handler one');
		}
		function reformer(){
			var f = document.getElementById('1').onclick;
			document.getElementById('1').onclick = function(){onClickBtnTwo.call(); f.call()}
		}
		function onClickBtnTwo(){
			alert('handler two');
		}		
	</script>
  <body id="body" onload="setOnClick(); reformer();">
	<input type="button" id="1">
  </body>
</html>



ЗЫ
getAttribute возвращает строку

Kolyaj 12.02.2009 14:05

А об addEventListener/attachEvent ничего не слышали?
Цитата:

Сообщение от IIIEPJIOK
onClickBtnOne.call()

call тут зачем?

Цитата:

Сообщение от IIIEPJIOK
getAttribute возвращает строку

А вы в ИЕ для аттрибутов событий попробуйте :)

slayer_tmb 12.02.2009 15:13

ЗЫ
getAttribute возвращает строку

IE возвращает функцию
а call я вызывал для проверки что возвращенная функция реально работает
и она работает
насчет атача не знал спасибо за совет почитаю

slayer_tmb 12.02.2009 15:21

Цитата:

Сообщение от IIIEPJIOK (Сообщение 12509)
Поэкспериментируйте с этим :)

Спасибо усё работает.
Только я не пойму почему у меня не работает
я делаю
originalhandler=menunodes[i].getAttribute('onclick');
(и он 100% возвращает функцию)
ты делаешь
var f = document.getElementById('1').onclick;

далее
я делаю
menunodes[i].onclick=function() { originalhandler.call(); MenuClick(this); };
ты:
document.getElementById('1').onclick = function(){onClickBtnTwo.call(); f.call()}

но у тебя на f.call не ругается а у меня на originalhandler.call(); ругается


гы
document.getElementById('1').addEventListener("cli ck", function() {onClickBtnTwo();}, false);
повесила IE

IIIEPJIOK 12.02.2009 15:51

Цитата:

call тут зачем?
привычка, не более :)
Данный пример, я рассматриваю, как частный от:
Element.onEvent = function(){refObject.method.call(refObject, param1, ..., paramN)}

Андрей Параничев 12.02.2009 16:04

slayer_tmb,
На все ваши вопросы ответят две статьи:
http://javascript.ru/tutorial/basic/...ispol-zovaniia
http://javascript.ru/start/events/intro

IIIEPJIOK 12.02.2009 16:08

Цитата:

А вы в ИЕ для аттрибутов событий попробуйте
попробовал.....
имею сказать две вещи
1. я х@ею дорога я редакция :)
2. ИЕ возвращает возвращает не саму функцию обработчик, а некую, созданную автоматически, в которой вызывается функция обработчик....и проблему "почему не работает" надо искать в этом направлении.

Kolyaj 12.02.2009 16:10

Цитата:

Сообщение от slayer_tmb
но у тебя на f.call не ругается а у меня на originalhandler.call(); ругается

Потому что getAttribute возвращает строку везде, кроме ИЕ для событий.

Андрей Параничев 12.02.2009 16:29

Просто не устанавливайте обработчики через setAttribute и не получайте их, через getAttribute. В случае этих функций работа не гарантируется, а по спецификации значением атрибута может быть только примитивное значение.


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