[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как найти this в массиве?
eXaM
В общем, ситуация такая: есть цикл for, проходящий по всем элементам массива array и подписывающий каждый из них на событие onclick, то есть примерно так:
for(var i = 0; i < array.length; i++){
array[i].onclick = function(){
...
}
}

И в теле функции (где многоточие) нужно получить эту i, то есть найти, каким по счету элементом массива array является this, на который нажали. Как это можно сделать? Проблема в том, что событие onclick происходит, когда последняя итерация цикла уже завершена, то есть в теле функции выполняется условие i == array.length.

UPD: случайно наткнулся на решение.



Спустя 4 минуты, 41 секунда (23.02.2011 - 12:10) nugle написал(а):
Для чего вообще этот скрипт?цель его расскажите пожалуйста, а то так не всё понятно!

Спустя 4 минуты, 16 секунд (23.02.2011 - 12:14) eXaM написал(а):
Это скрипт для вкладок, чтобы удобно было редактировать несколько текстовых полей сразу.

Спустя 1 час, 29 минут, 7 секунд (23.02.2011 - 13:43) ApuktaChehov написал(а):
Честно говоря, ничего не понял. Что определить то надо?

Спустя 4 минуты, 21 секунда (23.02.2011 - 13:48) nugle написал(а):
я тоже если честно, но хорошо что автор разобрался!

Спустя 1 час, 29 минут, 52 секунды (23.02.2011 - 15:17) eXaM написал(а):
Ну, смотрите. Допустим, такой код:
for(var i = 0; i < array.length; i++){
array[i].onclick = function(){
alert("Кликнули по " + i "-му элементу массива");
}
}

работать не будет. Вне зависимости от того, по какому элементу кликнуть, он выведет число, соответствующее array.length, потому что i будет равно этому числу после того, как цикл придет к своему завершению. Мы ведь кликаем уже после того, как цикл завершился. Поэтому можно сделать так:
for(var i = 0; i < array.length; i++){
array[i].onclick = function(){
alert("Кликнули по " + this.number "-му элементу массива");
}
array[i].number = i;
}

то есть каждому из элементов массива привязывается свойство, содержащее его порядковый номер в массиве, и это свойство потом можно преспокойно использовать. Не знаю, как еще объяснить. Ну, вот если, скажем, кликаем по array[3], то в this.number эта троечка и окажется.

Спустя 6 часов, 18 минут, 33 секунды (23.02.2011 - 21:36) Invis1ble написал(а):
eXaM
а зачем вообще с циклом делать? указывай обработчик onclick прямо в html. Что-то наподобие этого:
<input type="text" name="test" value="test" onclick="javascript: func(this)" />

function func(input){
alert(input.value);
}

Спустя 1 час, 48 минут, 14 секунд (23.02.2011 - 23:24) eXaM написал(а):
У меня не совсем так, alert я для примера указал. У меня 5 строчек кода. И таких 3 штуки. Все это писать в атрибут onclick — неаккуратно выйдет. Да и мне удобно, когда разделены верстка и скрипт.

UPD: а, все, не сразу сообразил, устал уже. Тем не менее, мысль о разделении верстки и скрипта в силе.

Спустя 1 час, 25 минут, 49 секунд (24.02.2011 - 00:50) Invis1ble написал(а):
eXaM
Цитата
Тем не менее, мысль о разделении верстки и скрипта в силе

ну тогда выбирай между "неаккуратностью" и УГ с циклом smile.gif
А вобще, я бы не сказал, что в приведенном мной примере код и представление не разделено...

Спустя 1 час, 7 минут, 41 секунда (24.02.2011 - 01:58) sergeiss написал(а):
eXaM - значиЦЦа, объясняю... Есть такая хрень в JS, как event. Из него ты можешь узнать много чего. Например, ты можешь сделать некую "общую" функцию, в которой сможешь узнать, какой объект и какое событие вызвал. Какие были нажаты кнопки... И многое другое.

Подробнее читай тут http://javascript.ru/tutorial/events/properties или ищи в и-нете. Ключевые слова "javascript event".

Спустя 6 часов, 52 минуты, 23 секунды (24.02.2011 - 08:50) Michael написал(а):
самое интересное, что eXaM сделал то все грамотно.

Спустя 1 час, 1 минута, 57 секунд (24.02.2011 - 09:52) eXaM написал(а):
sergeiss, я знаю, что такое event. Не совсем понял, на незнание чего вы указали.
Michael, это не я сделал, а Илья Кантор, он неграмотно не умеет. biggrin.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.