Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Прерывание цикла (https://javascript.ru/forum/dom-window/35466-preryvanie-cikla.html)

Zim_one 11.02.2013 16:31

Прерывание цикла
 
Здравствуйте.
function qwerdsa(){
		window.open('sdfasf');
	}

	function swap_links(){
	for(var i=0; i<=document.links.length; i++){
		if(document.links[i].href=="http://www.javascript.ru/"){
			alert(i);
			document.links[i].addEventListener("click", qwerdsa, false) || attachEvent("onclick", qwerdsa);
		}
	}
}

window.addEventListener("load", swap_links, false) || attachEvent("onload", swap_links);


Скажите пожалуйста, почему когда находит ссылку с нужным href цикл прерывается? Например:
<a href="http://www.javascript.ru">javascript0</a><br>
<a href="http://www.javascript.ru">javascript1</a><br>


то для javascript1 onclick не будет работать.

Deff 11.02.2013 16:36

Пробуйте alert(i); заменить на вывод в консоль или в div


<div id="Out"><div/>

 document.getElementById('Out').innerHTML=i;

Zim_one 11.02.2013 16:42

я alert(i); добавил просто чтоб увидеть что цикл прерывается на первой ссылке. Тут проблема не в алерте, а в том что этот код
document.links[i].addEventListener("click", qwerdsa, false) || attachEvent("onclick", qwerdsa);
прерывает цикл, а я не могу понять почему. (даже если убрать алерт, то цикл остановится после первого совпадения)

danik.js 11.02.2013 16:53

Цитата:

Сообщение от Zim_one
document.links[i].addEventListener("click", qwerdsa, false) || attachEvent("onclick", qwerdsa);

addEventListener() вернет undefined, поэтому начнется выполняться attachEvent, который есть только в IE.

Можете подключить https://github.com/devote/spike и забыть про всякие attachEvent. Если же кода мало, можно просто создать вспомогательную функцию для кроссбраузерного addEventListener

Zim_one 11.02.2013 16:57

Спасибо, теперь работает.

rgl 11.02.2013 17:23

document.links[i].addEventListener("click", qwerdsa, false) || attachEvent("onclick", qwerdsa);
Тут как минимум две ошибки, я бы написал так:
document.links[i].addEventListener ? document.links[i].addEventListener("click", qwerdsa, false) : document.links[i].addEventListener.attachEvent("onclick", qwerdsa);

рони 11.02.2013 22:45

Цитата:

Сообщение от rgl
я бы написал так

Цитата:

Сообщение от rgl
document.links[i].addEventListener.attachEvent("onclick", qwerdsa);

:no:

рони 11.02.2013 22:46

Цитата:

Сообщение от Zim_one
i<=document.links.length;

равно лишнее

rgl 12.02.2013 10:10

Цитата:

Сообщение от рони (Сообщение 233257)
:no:

Ну очепятка, с кем не бывает
document.links[i].addEventListener.attachEvent


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