Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Добавить обработку события / 9 сообщений из 9, страница 1 из 1
10.08.2007, 10:13
    #34718991
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить обработку события
Вот так добавляю обработчик события нажатия на ссылке:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
var link = document.getElementById("link");
if (link.attachEvent){
	link.attachEvent("onclick", linkf);}
else{
	if (link.addEventListener){link.addEventListener("click", linkf, true);}
}

function linkf(){
	alert(this.href);
}

В FF работает, а в IE в alert-е "undefined".

Однако если делать вот так:
Код: plaintext
1.
2.
3.
4.
5.
var link = document.getElementById("link");
link.onclick = linkf;

function linkf(){
	alert(this.href);
}
то во всех браузерах в alert-е то что нужно - урл ссылки.


Как правильно добавить обработчик события?


Спасибо.
...
Рейтинг: 0 / 0
10.08.2007, 11:48
    #34719326
vasa_c
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить обработку события
Общеизвестная бага. В IE при установке через attachEvent this в обработчике указывает на window.
Можно по старинке устанавливать через onclick=, если уверены, что больше на данный элемент не будут вешаться обработчики.
Либо передавать через анонимную функцию:
link.attachEvent("onclick", (function() {return linkf(link)} ));
но тут опять в нашем любимом IE могут быть утечки памяти.
Либо попытаться достать целевой элемент из window.event
...
Рейтинг: 0 / 0
10.08.2007, 12:24
    #34719490
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить обработку события
vasa_c , спасибо.

Для IE можно еще вот так сделать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
var link = document.getElementById("link");
if (link.attachEvent){
	link.attachEvent("onclick", linkf);}
else{
	if (link.addEventListener){link.addEventListener("click", linkf, true);}
}

function linkf(){
	alert(event.srcElement.href);
}

И вот вопрос, что будет грамотней
1. использовать attachEvent + srcElement
или
2. использовать link.onclick и this ??
...
Рейтинг: 0 / 0
10.08.2007, 12:41
    #34719557
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить обработку события
И сразу еще впрос:

Если использую addEventListener (для FF и Opera):
Код: plaintext
1.
2.
3.
link.addEventListener("click", linkf, true);
function linkf(){
	return false;
}
То переход по ссылке не отменяется - как его отменить?
(Или это не возможно сделать если использовать addEventListener, а не onclick)
...
Рейтинг: 0 / 0
10.08.2007, 15:21
    #34720210
LINUXER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить обработку события
Alex_BBB
То переход по ссылке не отменяется - как его отменить?
(Или это не возможно сделать если использовать addEventListener, а не onclick)
в соседней теме видел evt.returnValue = false; =)
работает?
...
Рейтинг: 0 / 0
10.08.2007, 15:26
    #34720246
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить обработку события
LINUXER , да работает.
Что-то у меня сомнения насчет грамотности всего получившегося кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
function attachevent(element, event, handler){
	try {element.addEventListener(event, handler, false);}
	catch (e){element.attachEvent('on'+event, handler);}
}

function linkf(evt){
	var evt = (evt) ? evt : window.event;
	
	//kill default handler
	try {evt.preventDefault();}
	catch (e){evt.returnValue = false;}

	var href = (evt.target) ? evt.target.href : evt.srcElement.href;
	alert(href);
}

var linkas = document.getElementById("linkas");
attachevent(linkas, 'click', linkf);

Как думаете нормально?
...
Рейтинг: 0 / 0
10.08.2007, 17:24
    #34720728
LINUXER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить обработку события
раз работает, то вполне
Ну try-catch, можно заменить на if-else
...
Рейтинг: 0 / 0
10.08.2007, 17:35
    #34720759
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить обработку события
LINUXER
Ну try-catch, можно заменить на if-else
я читал что try-catch работает быстрее. Врут?
...
Рейтинг: 0 / 0
10.08.2007, 18:43
    #34720928
LINUXER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить обработку события
Alex_BBBя читал что try-catch работает быстрее. Врут?
может быть
хотя я думал наоборот
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<script>
var start=new Date();
var n= 100000 ;
for(var i= 0 ;i<n;++i){
  var a,r=Math.round(Math.random())
  try{a= 3 /r;
  }catch(e){a=- 1 ;}
}
var t1=new Date()-start
start=new Date();
for(var i= 0 ;i<n;++i){
  var a,r=Math.round(Math.random())
  if(r!= 0 )a= 3 /r
  else a=- 1 ;
}
var t2=new Date()-start;
alert( 1 . 0 *t1/t2);
//не принципиально
</script>
можно конечно на других исключениях попробовать
хотя если нет разницы зачем *аться
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Добавить обработку события / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]