Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.05.2011, 18:32
Аватар для Armen
Кандидат Javascript-наук
Отправить личное сообщение для Armen Посмотреть профиль Найти все сообщения от Armen
 
Регистрация: 28.06.2009
Сообщений: 120

Добавление события в цикле
Здравсвуйте.
Подскажите пожалуйста, почему не работает код.
Если добавляю событие для одного элемента по getElementById то все ок, а когда добавляю в цикле для елементов getElementByTagName то не работает
<script type="text/javascript">

window.onload = function()
{
	var aTag = document.getElementsByTagName("A");

	for( var i = 0; i <= aTag.length; i ++ )
	{
		var links = aTag[i];
		addEvent( links, 'click', handler );			
	}
	
	var handler = function() { alert("Hello") }
}

function addEvent(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;
	}
}
</script>

<body>

<a href="#">Click</a>
<a href="#">Click</a>
<a href="#">Click</a>
<a href="#">Click</a>
<a href="#">Click</a>
<a href="#">Click</a>
<a href="#">Click</a>
<a href="#">Click</a>
<a href="#">Click</a>

</body>
Ответить с цитированием
  #2 (permalink)  
Старый 04.05.2011, 18:44
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Нужно в цикле for проверять не <=, а <.
UPD: А еще было бы неплохо присвоить функцию переменной handler перед тем, как передавать ее, а то ж undefined передаешь.

Последний раз редактировалось Sweet, 04.05.2011 в 18:47.
Ответить с цитированием
  #3 (permalink)  
Старый 04.05.2011, 20:22
Аватар для Armen
Кандидат Javascript-наук
Отправить личное сообщение для Armen Посмотреть профиль Найти все сообщения от Armen
 
Регистрация: 28.06.2009
Сообщений: 120

Сообщение от Sweet Посмотреть сообщение
Нужно в цикле for проверять не <=, а <.
UPD: А еще было бы неплохо присвоить функцию переменной handler перед тем, как передавать ее, а то ж undefined передаешь.
Но почему тогда, когда я добавляю ф-ю по id все работает и undefined не выводиться?
Ответить с цитированием
  #4 (permalink)  
Старый 04.05.2011, 20:35
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от Armen
Но почему тогда, когда я добавляю ф-ю по id все работает и undefined не выводиться?
А можно код?
Ответить с цитированием
  #5 (permalink)  
Старый 04.05.2011, 21:25
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Armen, вы написали полный бред...
я понимаю, если нужно несколько событий повестить на элемент:
<script type="text/javascript">
window.onload = function() {
    var event = ['keyup', 'change'], 
		forma = document.forms['forma'], 
		i = forma.elements.length;
    while(i--) {
       forma['on'+event[i]] = function(i) {
           return function() {
		      var input = this.elements[0].value;
		      this.elements[1].value = input == '' ? '' : input;
           };
      }(i);
    }
};
</script>
<form name="forma">
    <input type="text" value="" />
    <input type="text" value="" />
</form>


однако в вашем случае, я уверен больше чем на 100% что вы пытаетесь получить примерно это:
<script type="text/javascript">
window.onload = function() {
    var div = document.getElementById('div').getElementsByTagName('a'), i = div.length;
    while(i--) {
       div[i].onclick = function(i) {
           return function() {
				alert(i);
			};
      }(i);
    }
};
</script>
<div id="div">
	<a href="#">click</a>
	<a href="#">click</a>
	<a href="#">click</a>
</div>
Ответить с цитированием
  #6 (permalink)  
Старый 04.05.2011, 22:33
Аватар для Armen
Кандидат Javascript-наук
Отправить личное сообщение для Armen Посмотреть профиль Найти все сообщения от Armen
 
Регистрация: 28.06.2009
Сообщений: 120

Сообщение от monolithed Посмотреть сообщение
Armen, вы написали полный бред...
я понимаю, если нужно несколько событий повестить на элемент:
<script type="text/javascript">
window.onload = function() {
    var event = ['keyup', 'change'], 
		forma = document.forms['forma'], 
		i = forma.elements.length;
    while(i--) {
       forma['on'+event[i]] = function(i) {
           return function() {
		      var input = this.elements[0].value;
		      this.elements[1].value = input == '' ? '' : input;
           };
      }(i);
    }
};
</script>
<form name="forma">
    <input type="text" value="" />
    <input type="text" value="" />
</form>


однако в вашем случае, я уверен больше чем на 100% что вы пытаетесь получить примерно это:
<script type="text/javascript">
window.onload = function() {
    var div = document.getElementById('div').getElementsByTagName('a'), i = div.length;
    while(i--) {
       div[i].onclick = function(i) {
           return function() {
				alert(i);
			};
      }(i);
    }
};
</script>
<div id="div">
	<a href="#">click</a>
	<a href="#">click</a>
	<a href="#">click</a>
</div>
Тоесть вы хотите сказать, что addEventListener и attachEvent нужно использовать только тогда, когда необходимо "весить" несколько событий на один элемент?

и вы считаете, что этот код полная чушь ?
<script type="text/javascript">

window.onload = function()
{
	var aTag = document.getElementsByTagName("A");
	
	var handler = function() { alert("Hello") }

	addEvent( aTag, 'click', handler );
	

	for( var i = 0; i <= aTag.length; i ++ )
	{
		var links = aTag[i];
		addEvent( links, 'click', handler );			
	}
	
	
	
}

function addEvent(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;
	}
}
</script>


<body>

<a href="#">Click</a>
<a href="#">Click</a>
<a href="#">Click</a>
<a href="#">Click</a>
<a href="#">Click</a>
<a href="#">Click</a>
</body>


Я новичек в js поэтому буду крайне признателен, если вы объясните, почему. Спасибо большое за помощь

Последний раз редактировалось monolithed, 05.05.2011 в 14:25.
Ответить с цитированием
  #7 (permalink)  
Старый 04.05.2011, 22:41
Аватар для Armen
Кандидат Javascript-наук
Отправить личное сообщение для Armen Посмотреть профиль Найти все сообщения от Armen
 
Регистрация: 28.06.2009
Сообщений: 120

Сообщение от Sweet Посмотреть сообщение
А можно код?
Спасибо, помогло, переставил ф-ю в начало, кода, как вы и сказали
Ответить с цитированием
  #8 (permalink)  
Старый 04.05.2011, 23:11
Аватар для Armen
Кандидат Javascript-наук
Отправить личное сообщение для Armen Посмотреть профиль Найти все сообщения от Armen
 
Регистрация: 28.06.2009
Сообщений: 120

Сообщение от Sweet Посмотреть сообщение
А можно код?
Работает везде, кроме IE8 и ниже, подскажите пожалуйста, в чем проблема
Ответить с цитированием
  #9 (permalink)  
Старый 05.05.2011, 06:48
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Сообщение от Armen
or( var i = 0; i <= aTag.length; i ++ )
не может везде работать так как нет элемента aTag[aTag.length], уберите знак равно, вам же сказали.
Сообщение от Armen
Тоесть вы хотите сказать, что addEventListener и attachEvent нужно использовать только тогда, когда необходимо "весить" несколько событий на один элемент?
Если обработчик один то какой смысл пользоваться addEvent?
__________________
readOnly
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Привязка события click в цикле к эелементц craz Events/DOM/Window 8 14.11.2010 12:28
Добавление события Skipp Events/DOM/Window 23 29.06.2010 10:09
Добавление события Google-календарь InviS Серверные языки и технологии 0 04.05.2010 04:48
Установить события через цикл DjTarik Общие вопросы Javascript 4 28.04.2010 10:58
Явный вызов процедуры обработки события. supchik Общие вопросы Javascript 18 27.01.2009 13:16