Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.02.2013, 16:31
Интересующийся
Отправить личное сообщение для Zim_one Посмотреть профиль Найти все сообщения от Zim_one
 
Регистрация: 30.10.2012
Сообщений: 27

Прерывание цикла
Здравствуйте.
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 не будет работать.
Ответить с цитированием
  #2 (permalink)  
Старый 11.02.2013, 16:36
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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


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

 document.getElementById('Out').innerHTML=i;
Ответить с цитированием
  #3 (permalink)  
Старый 11.02.2013, 16:42
Интересующийся
Отправить личное сообщение для Zim_one Посмотреть профиль Найти все сообщения от Zim_one
 
Регистрация: 30.10.2012
Сообщений: 27

я alert(i); добавил просто чтоб увидеть что цикл прерывается на первой ссылке. Тут проблема не в алерте, а в том что этот код
document.links[i].addEventListener("click", qwerdsa, false) || attachEvent("onclick", qwerdsa);
прерывает цикл, а я не могу понять почему. (даже если убрать алерт, то цикл остановится после первого совпадения)
Ответить с цитированием
  #4 (permalink)  
Старый 11.02.2013, 16:53
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Zim_one
document.links[i].addEventListener("click", qwerdsa, false) || attachEvent("onclick", qwerdsa);
addEventListener() вернет undefined, поэтому начнется выполняться attachEvent, который есть только в IE.

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

Последний раз редактировалось danik.js, 11.02.2013 в 16:57.
Ответить с цитированием
  #5 (permalink)  
Старый 11.02.2013, 16:57
Интересующийся
Отправить личное сообщение для Zim_one Посмотреть профиль Найти все сообщения от Zim_one
 
Регистрация: 30.10.2012
Сообщений: 27

Спасибо, теперь работает.
Ответить с цитированием
  #6 (permalink)  
Старый 11.02.2013, 17:23
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

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);
Ответить с цитированием
  #7 (permalink)  
Старый 11.02.2013, 22:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от rgl
я бы написал так
Сообщение от rgl
document.links[i].addEventListener.attachEvent("onclick", qwerdsa);
Ответить с цитированием
  #8 (permalink)  
Старый 11.02.2013, 22:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от Zim_one
i<=document.links.length;
равно лишнее
Ответить с цитированием
  #9 (permalink)  
Старый 12.02.2013, 10:10
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Сообщение от рони Посмотреть сообщение
Ну очепятка, с кем не бывает
document.links[i].addEventListener.attachEvent
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение задачи, с использованием цикла for. Eldon Общие вопросы Javascript 4 19.11.2012 10:41
прерывание цикла 9112 Общие вопросы Javascript 5 07.09.2012 15:57
Добавить прерывание Vladimir_Kl Элементы интерфейса 1 27.01.2012 11:06
Как приостановить выполнение цикла? SashaBorandi jQuery 3 13.02.2009 08:57
как отобразить в окне значения счетчика во время выполнения цикла FOR Алекс97 Общие вопросы Javascript 5 06.09.2008 10:36