Вход

Просмотр полной версии : Как получить указатель на элемент вызвавший функцию


pelayo
29.06.2010, 18:06
Дорбый день форумчане,

Вроде всё просто но никак не могу разобраться а сроки поджимают(
При нажатие на ссылку вызывается функция некоего объекта, в этой фунции по указатею 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();

exec
29.06.2010, 18:12
alert(this);

pelayo
29.06.2010, 18:22
так не получиться в данном случае alert(this) выведен [object Window] , а не элемент html на который нажали.

Octane
29.06.2010, 18:39
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;
};

pelayo
29.06.2010, 20:26
к сожалению результат тот же. получаю доступ к объекту, но нет доступа к ссылке( неужели нет решения?

PeaceCoder
29.06.2010, 21:42
Изначально не правильно построен код.
Во первых 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;
}

pelayo
29.06.2010, 22:20
Большое спасибо! Вы мне очень помогли. Доработал код всё стало просто и понятно.

pelayo
29.06.2010, 22:54
Ваш код хорошо работает в FF но IE никак не хочет возврашать указатель на ссылку с помощью this

PeaceCoder
29.06.2010, 22:59
никак не хочет возврашать указатель на ссылку с помощью this
праильно, потому что ИЕ не умеет корректно передавать элемент на котором было событие.
Почитайте тут (http://javascript.ru/tutorial/events/crossbrowser)
а конкретно Первая попытка: attachEvent + addEventListener (http://javascript.ru/tutorial/events/crossbrowser#pervaya-popytka:-attachevent-addeventlistener)
в вашем коде выходом будет так:
else if (elem.attachEvent) {
23 elem.attachEvent('on' + evType, function(e){fn.call(elem,e)})

pelayo
29.06.2010, 23:32
Спасибо вот теперь полный порядок