Да, просто замени весь шаблон на этот:
|

29.06.2010, 17:06
|
|
Новичок на форуме
|
|
Регистрация: 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();
|
|

29.06.2010, 17:12
|
|
Профессор
|
|
Регистрация: 21.01.2010
Сообщений: 1,022
|
|
|
|
|

29.06.2010, 17:22
|
|
Новичок на форуме
|
|
Регистрация: 29.06.2010
Сообщений: 6
|
|
|
так не получиться в данном случае alert(this) выведен [object Window] , а не элемент html на который нажали.
|
|

29.06.2010, 17:39
|
|
|
Регистрация: 09.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;
};
|
|

29.06.2010, 19:26
|
|
Новичок на форуме
|
|
Регистрация: 29.06.2010
Сообщений: 6
|
|
|
к сожалению результат тот же. получаю доступ к объекту, но нет доступа к ссылке( неужели нет решения?
|
|

29.06.2010, 20:42
|
 |
Профессор
|
|
Регистрация: 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 в 20:45.
|
|

29.06.2010, 21:20
|
|
Новичок на форуме
|
|
Регистрация: 29.06.2010
Сообщений: 6
|
|
|
Большое спасибо! Вы мне очень помогли. Доработал код всё стало просто и понятно.
|
|

29.06.2010, 21:54
|
|
Новичок на форуме
|
|
Регистрация: 29.06.2010
Сообщений: 6
|
|
|
Ваш код хорошо работает в FF но IE никак не хочет возврашать указатель на ссылку с помощью this
|
|

29.06.2010, 21:59
|
 |
Профессор
|
|
Регистрация: 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 в 22:01.
|
|

29.06.2010, 22:32
|
|
Новичок на форуме
|
|
Регистрация: 29.06.2010
Сообщений: 6
|
|
|
Спасибо вот теперь полный порядок
|
|
|
|