Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.06.2010, 18:06
Новичок на форуме
Отправить личное сообщение для pelayo Посмотреть профиль Найти все сообщения от pelayo
 
Регистрация: 29.06.2010
Сообщений: 6

Как получить указатель на элемент вызвавший функцию
Дорбый день форумчане,

Вроде всё просто но никак не могу разобраться а сроки поджимают(
При нажатие на ссылку вызывается функция некоего объекта, в этой фунции по указатею 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();
Ответить с цитированием
  #2 (permalink)  
Старый 29.06.2010, 18:12
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

alert(this);
Ответить с цитированием
  #3 (permalink)  
Старый 29.06.2010, 18:22
Новичок на форуме
Отправить личное сообщение для pelayo Посмотреть профиль Найти все сообщения от pelayo
 
Регистрация: 29.06.2010
Сообщений: 6

так не получиться в данном случае alert(this) выведен [object Window] , а не элемент html на который нажали.
Ответить с цитированием
  #4 (permalink)  
Старый 29.06.2010, 18:39
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

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;
};
Ответить с цитированием
  #5 (permalink)  
Старый 29.06.2010, 20:26
Новичок на форуме
Отправить личное сообщение для pelayo Посмотреть профиль Найти все сообщения от pelayo
 
Регистрация: 29.06.2010
Сообщений: 6

к сожалению результат тот же. получаю доступ к объекту, но нет доступа к ссылке( неужели нет решения?
Ответить с цитированием
  #6 (permalink)  
Старый 29.06.2010, 21:42
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

Изначально не правильно построен код.
Во первых
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;
}
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт

Последний раз редактировалось PeaceCoder, 29.06.2010 в 21:45.
Ответить с цитированием
  #7 (permalink)  
Старый 29.06.2010, 22:20
Новичок на форуме
Отправить личное сообщение для pelayo Посмотреть профиль Найти все сообщения от pelayo
 
Регистрация: 29.06.2010
Сообщений: 6

Большое спасибо! Вы мне очень помогли. Доработал код всё стало просто и понятно.
Ответить с цитированием
  #8 (permalink)  
Старый 29.06.2010, 22:54
Новичок на форуме
Отправить личное сообщение для pelayo Посмотреть профиль Найти все сообщения от pelayo
 
Регистрация: 29.06.2010
Сообщений: 6

Ваш код хорошо работает в FF но IE никак не хочет возврашать указатель на ссылку с помощью this
Ответить с цитированием
  #9 (permalink)  
Старый 29.06.2010, 22:59
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

Сообщение от pelayo
никак не хочет возврашать указатель на ссылку с помощью this
праильно, потому что ИЕ не умеет корректно передавать элемент на котором было событие.
Почитайте тут
а конкретно Первая попытка: attachEvent + addEventListener
в вашем коде выходом будет так:
else if (elem.attachEvent) {
23	        elem.attachEvent('on' + evType, function(e){fn.call(elem,e)})
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт

Последний раз редактировалось PeaceCoder, 29.06.2010 в 23:01.
Ответить с цитированием
  #10 (permalink)  
Старый 29.06.2010, 23:32
Новичок на форуме
Отправить личное сообщение для pelayo Посмотреть профиль Найти все сообщения от pelayo
 
Регистрация: 29.06.2010
Сообщений: 6

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


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить список элементов в localStorage? Бобр Общие вопросы Javascript 8 17.09.2013 14:32
bind: как передать функции указатель на объект trial jQuery 4 25.05.2010 01:35
Как правильно получить введенные данные в поле? buket jQuery 11 11.04.2010 19:59
Как добавить элемент в обьект json Юрий Игоревич Общие вопросы Javascript 2 26.10.2009 15:01
Как передать элемент в функцию после createElement Oleg NT Общие вопросы Javascript 3 23.06.2008 02:11