Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как получить указатель на элемент вызвавший функцию (https://javascript.ru/forum/misc/10345-kak-poluchit-ukazatel-na-ehlement-vyzvavshijj-funkciyu.html)

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

Цитата:

Сообщение от pelayo
никак не хочет возврашать указатель на ссылку с помощью this

праильно, потому что ИЕ не умеет корректно передавать элемент на котором было событие.
Почитайте тут
а конкретно Первая попытка: attachEvent + addEventListener
в вашем коде выходом будет так:
else if (elem.attachEvent) {
23	        elem.attachEvent('on' + evType, function(e){fn.call(elem,e)})

pelayo 29.06.2010 23:32

Спасибо вот теперь полный порядок


Часовой пояс GMT +3, время: 00:19.