Показать сообщение отдельно
  #39 (permalink)  
Старый 31.03.2013, 22:01
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

Сообщение от platedz Посмотреть сообщение
Подскажите, как правильно выполнить следующее

for(var i=0; i<document.getElementsByName("my_name").length; i++)
{
	document.getElementsByName("my_name")[i].onkeyup = function(i)
	{
		console.log(i);
	}
}
Хрестоматийный пример для использования замыканий.

Кстати так:
for(var i=0; i<document.getElementsByName("my_name").length; i++){
	document.getElementsByName("my_name")[i].onkeyup = ...
}
делать не рекомендуется, ибо каждую итерацию цикла у вас сначала идёт получение заново всех элементов ByName("my_name"), затем получение заново длины, а после, в теле цикла, ещё раз получение всех элементов ByName("my_name"). Всё это вещи тратящие вычислительное время. В современных браузерах предусмотрено всяческое кеширование подобных случаев на уровне движка, но я бы не рекомендовал слишком уж полагаться на это.
Более экономичный вариант:
for(var i=0, my_name=document.getElementsByName("my_name"), l=my_name.length; i<l; i++){
	my_name[i].onkeyup = ...
}


P.S. Ну и лично мне больше всего нравится для таких случаев использовать обратный перебор :
var my_name=document.getElementsByName("my_name"), i=my_name.length; 
while(i--){
	my_name[i].onkeyup = ...
}




Пример: Если не разобрались сами с замыканиями.
for(var i=0, my_name=document.getElementsByName("my_name"), l=my_name.length; i<l; i++){
	my_name[i].onkeyup = function(i){
		return function(){
			console.log(i);
		}
	}(i) 
}
__________________
29375, 35

Последний раз редактировалось Aetae, 31.03.2013 в 22:20.
Ответить с цитированием