powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Добавить обработку события
9 сообщений из 9, страница 1 из 1
Добавить обработку события
    #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
Добавить обработку события
    #34719326
vasa_c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Общеизвестная бага. В IE при установке через attachEvent this в обработчике указывает на window.
Можно по старинке устанавливать через onclick=, если уверены, что больше на данный элемент не будут вешаться обработчики.
Либо передавать через анонимную функцию:
link.attachEvent("onclick", (function() {return linkf(link)} ));
но тут опять в нашем любимом IE могут быть утечки памяти.
Либо попытаться достать целевой элемент из window.event
...
Рейтинг: 0 / 0
Добавить обработку события
    #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
Добавить обработку события
    #34719557
Alex_BBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И сразу еще впрос:

Если использую addEventListener (для FF и Opera):
Код: plaintext
1.
2.
3.
link.addEventListener("click", linkf, true);
function linkf(){
	return false;
}
То переход по ссылке не отменяется - как его отменить?
(Или это не возможно сделать если использовать addEventListener, а не onclick)
...
Рейтинг: 0 / 0
Добавить обработку события
    #34720210
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_BBB
То переход по ссылке не отменяется - как его отменить?
(Или это не возможно сделать если использовать addEventListener, а не onclick)
в соседней теме видел evt.returnValue = false; =)
работает?
...
Рейтинг: 0 / 0
Добавить обработку события
    #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
Добавить обработку события
    #34720728
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
раз работает, то вполне
Ну try-catch, можно заменить на if-else
...
Рейтинг: 0 / 0
Добавить обработку события
    #34720759
Alex_BBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LINUXER
Ну try-catch, можно заменить на if-else
я читал что try-catch работает быстрее. Врут?
...
Рейтинг: 0 / 0
Добавить обработку события
    #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
9 сообщений из 9, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Добавить обработку события
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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