[JS] дополнить реакцию на событие

Arina_Kulikova

есть такая страничка

...
<a href="http://ax3" onclick="alert('gj')">ax3</a>
...
<script>our_fucn; </script>
</body>
</html>

функция out_func пробегает по всем ссылкам страницы u ставит им на onclick некоторые действия
link.onclick="gj;"  

если у ссылки нет своего onclick'a то все ок, а вот если есть....
вопрос: как дополнить существующие действия на событие своими?

bobby

var tmp = link.onclick;
link.onclick = function {
gj;
return tmp;
};

Arina_Kulikova

нипалучидзо (
1) tmp должен выполняццо обязательно перед gj
2) если используеццо в начальном onclicke'e объект this, то в tmp он не будет виден

bobby

Тогда
var tmp = link.onclick;
link.onclick = function {
var tmpResult = tmp.apply(link);
gj.apply(link);
return tmpResult;
};
Только apply нету, например, в IE 5.0, но реализацию через eval можно найти в библиотеке prototype (а ещё лучше оттуда bind взять и сделать с помощью него).

Arina_Kulikova

идешь по нашим следам
только мы, увидив, что в ИЕ 5.0 не пашет, забили на этот способ...
придумали вот что: :О

var temp=sp_links.onclick;
var sp_onclick = temp.toString.match(/^[^\{\}]*\{([\S\s]*)\}[^\}\{]*$/i);
sp_links.onclick= new Function( sp_onclick[1]+" gj;");

sbs-66

А не судьба attachEvent использовать?

Arina_Kulikova

хмм.. не знал такой функции :о
ща посмотрел, потестил...
два недостатка:
1) не кроссбраузерно. Но это еще ладно, можно обойти.
2) если в исходном onclick'e стоит return false, то событие, добавленное через Attach, выполнится, а этого не нужно! Это уже критично...

Arina_Kulikova

в нашем же варианте выполняются все требования!
1) кроссбраузерность
2) при return false прикрепленное событие не выполнится
3) порядок выполенния событий верный: сначала исходное, потом прикрепленное
4) this, event доступны остаются

alex_nat

Он кросбраузерный. Токо в ИЕ и Опере с Мозилой по разному называются (читай, например, тут ). Но ежели охото через жопу, то можно и через жопу, кто ж спорит.
//

Arina_Kulikova

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

pitrik2

перечитай бля мой пост - ответ на твой, а именно второй пункт !
сам перечитай ссылку которую дали
там русским языком написано как приаттачить так чтобы return false работал

sbs-66

Ну и делайте через жопу, раз у вас такой стиль программирования принят.
Оставить комментарий
Имя или ник:
Комментарий: