Добавить функцию в обработчик 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 ... |
Цитата:
<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 возвращает строку |
А об addEventListener/attachEvent ничего не слышали?
Цитата:
Цитата:
|
ЗЫ
getAttribute возвращает строку IE возвращает функцию а call я вызывал для проверки что возвращенная функция реально работает и она работает насчет атача не знал спасибо за совет почитаю |
Цитата:
Только я не пойму почему у меня не работает я делаю 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 |
Цитата:
Данный пример, я рассматриваю, как частный от: Element.onEvent = function(){refObject.method.call(refObject, param1, ..., paramN)} |
slayer_tmb,
На все ваши вопросы ответят две статьи: http://javascript.ru/tutorial/basic/...ispol-zovaniia http://javascript.ru/start/events/intro |
Цитата:
имею сказать две вещи 1. я х@ею дорога я редакция :) 2. ИЕ возвращает возвращает не саму функцию обработчик, а некую, созданную автоматически, в которой вызывается функция обработчик....и проблему "почему не работает" надо искать в этом направлении. |
Цитата:
|
Просто не устанавливайте обработчики через setAttribute и не получайте их, через getAttribute. В случае этих функций работа не гарантируется, а по спецификации значением атрибута может быть только примитивное значение.
|
Да наверное в этом и был прикол. Я тока начал с DOM-ом разбираться и за неделю читая о понятиях микрософта в этом направлении тоже ушел в ах...й. А getAttribute у меня на самом деле временный был. Сперва присваивал без него. потом решил попробывать. смотрю функцию возвращает. вот и решил что нет разницы. просто этот конкретный момент я таки тока в ие и потестил.
.... блиииин ниче не понимаю уже сравните плиз два кода оба кода находятся внутри функции вызываемой онлоадом //этот не работает при нажатии говорит не известный объект f[..] или Null var f = new Array(menunum); for(i=0;i<menunum;i++) { f[i]=menunodes[i].onclick; if(typeof(f[i])=='function') menunodes[i].onclick=function() { MenuClick(this);f[i].call() } else menunodes[i].onclick=function() { MenuClick(this); } } //а этот работает var f = menunodes[1].onclick; for(i=0;i<menunum;i++) { ... menunodes[i].onclick=function() { MenuClick(this); }; } if(typeof(f)=='function') menunodes[1].onclick=function() { MenuClick(this);f.call() } |
Цитата:
добавив статью про замыкания почитал, разобрался, сделал... спасибо большое Супер сайт рабочий вариант получился такой for(i=0;i<menunum;i++) { ..... if(typeof(menunodes[i].onclick)=='function') { var f=menunodes[i].onclick; menunodes[i].onclick=function(x) { return function() { MenuClick(this); x.call(); } }(f); } else menunodes[i].onclick=function() { MenuClick(this); }; } Мне показалось это намного убобнее атачивента и аддивентлистнера. во первых кроссбраузерность во вторых порядок выполнения функцию легко задать. Правда вот об убивании функций не думал но в моей задаче они не нужны |
Добавить функцию в обработчик onclick
Допустим есть функция myFunction.
А теперь добавляем в нее новый функционал: var myOldFunction = myFunction; function myFunction() { ...добавляем сюда новый функционал... myOldFunction(); ...или сюда... } |
Я чета не пойму - это топик мазохистов? Чем addEventListener/attachEvent им не угодил?
|
Часовой пояс GMT +3, время: 03:19. |