Как получить указатель на элемент вызвавший функцию
Дорбый день форумчане,
Вроде всё просто но никак не могу разобраться а сроки поджимают( При нажатие на ссылку вызывается функция некоего объекта, в этой фунции по указатею this я имею доступ к данному объекту, а как получить доступ к указателю ссылки вызвавшей функцию??? Пробовал e.target | e.srcElement, но если в ссылку что то вложено, к примеру имидж, то я получаю уазатель на имидж, а мне нужна именно ссылка, которая вызвало функцию. Помогите разобраться:-? ! this.MyClass = function() { this.prop1 = 100; this.init = function() { addEvent(document.getElementById("link"), "click", function(e){ActionOnClick(e)}); } this.ActionOnClick = function(e) { //Я могу получить свойство prop используя this alert(this.prop1); //Как мне получить дескриптор ссылки которая вызвала эту функцию??? } return this; } addEvent = function (elem, evType, fn) { if (elem.addEventListener) { elem.addEventListener(evType, fn, false); } else if (elem.attachEvent) { elem.attachEvent('on' + evType, fn) } else { elem['on' + evType] = fn } } myObject = MyClass(); myObject.init(); |
alert(this); |
так не получиться в данном случае alert(this) выведен [object Window] , а не элемент html на который нажали.
|
var addEvent = document.addEventListener ? function (element, eventType, listener, useCapturing) { element.addEventListener(eventType, listener, useCapturing == true); return listener; } : function (element, eventType, listener) { var _listener = function () { listener.call(element, window.event) }; element.attachEvent("on" + eventType, _listener); return _listener; }; |
к сожалению результат тот же. получаю доступ к объекту, но нет доступа к ссылке( неужели нет решения?
|
Изначально не правильно построен код.
Во первых myObject = *!*new*/!* MyClass();иначе this будет ссылаться на window как я понял потому и срабатвает функция ActionOnClick(e) хотя по идее она должна быть не определена. Во вторых MyClass = function() { var T = this; this.prop1 = 100; this.init = function() { addEvent(document.getElementById("link"), "click", function(e){T.ActionOnClick.call(this,e)}); } this.ActionOnClick = function(e) { // this = елемент с событием, т.е. A //а обьект вам доступен по прежнему под переменной T; //Я могу получить свойство prop используя T alert(T.prop1); //Как мне получить дескриптор ссылки которая вызвала эту функцию??? alert(this.tagName); }; return this; } |
Большое спасибо! Вы мне очень помогли. Доработал код всё стало просто и понятно.
|
Ваш код хорошо работает в FF но IE никак не хочет возврашать указатель на ссылку с помощью this
|
Цитата:
Почитайте тут а конкретно Первая попытка: attachEvent + addEventListener в вашем коде выходом будет так: else if (elem.attachEvent) { 23 elem.attachEvent('on' + evType, function(e){fn.call(elem,e)}) |
Спасибо вот теперь полный порядок
|
Часовой пояс GMT +3, время: 01:30. |