Можно писать HTML: <a href='...' onClick='custom_function(this)'>...</a> Тогда из аргумента можно узнать href ссылки. Но мне нужно сделать динамическое назначение: [js]ar = document.getElementsByTagName('a'); for (i = 0; i < ar.length; i++) { ar.onclick = custom_function; }[/js] Тут уже нельзя передать функции аргумент this. Или можно? Как это сделать?
Попробуйте так: [js] ar = document.getElementsByTagName('a'); for (i = 0; i < ar.length; i++) { ar.onclick = 'custom_function(this)'; } [/js] Или так: [js] ar = document.getElementsByTagName('a'); for (i = 0; i < ar.length; i++) { ar.onclick = function () { custom_function(ar) }; } [/js]
Вышепредложенные варианты не работают. Работают следующие: Самое простое -- назначение через onclick с использованием лямбда-функции с передачей this [js] for (i = 0; i < links.length; i++) { links.onclick = function () { check(this); } } [/js] Назначение через onclick с использованием функции для привязки событий с передачей this [js] if (links[0].addEventListener){ for (i = 0; i < links.length; i++) links.addEventListener('click', function () {check(this) }, false); } else if (links[0].attachEvent){ //IE for (i = 0; i < links.length; i++) links.attachEvent('onclick', function () {check(this) }); } [/js] Теперь более заковыристые, с использованием замыканий и передачей ссылки объекта непосредственно в функцию С использованием onlick [js] for (i = 0; i < links.length; i++) { links.onclick = (function (link) { return function () { check(link); } })(links); } [/js] Через функцию привязки событий: [js] if (links[0].addEventListener){ for (i = 0; i < links.length; i++) links.addEventListener('click', (function (link) { return function () {check(link) }})(links), false); } else if (links[0].attachEvent){ for (i = 0; i < links.length; i++) links.attachEvent('onclick', (function (link) { return function () {check(link) }})(links)); } [/js] Сам код функции: [js] var links = document.getElementsByTagName("a"); function check(obj) { alert(obj.innerHTML); } [/js] Ссылки (должны быть вставлены до всех привязок): HTML: <a href="#">link</a> <a href="#">link2</a> <a href="#">link3</a>
Да, кстати, еще можно передавать ссылку на объект через событийный объект: [js] addEventListener("mouseout", (function () { return function (ev) {tobj(ev.target) }})(), false); attachEvent("onmouseout", (function () { return function (ev) {tobj(ev.srcElement) }})()); [/js]