Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обработчик события для всего массива 
:(
    Опции темы
GF
Дата 6.2.2007, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 30.8.2006

Репутация: нет
Всего: нет



Есть простой пример:
Код

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  <title></title>
  <script>
  function selector(node){    
      node.items = node.getElementsByTagName('li'); 
      node.selected=node.items[0]
      for(var i = 0; i < node.items.length; i++){   
          node.items[i].onclick = function(){
              this.style.backgroundColor = 'white';    
              node.selected.style.backgroundColor = 'whitesmoke';    
              node.selected = this;
          }
      }
  }
  </script>
</head>
<body onload="selector(document.getElementById('list'))" style="background-color: whitesmoke;">
<h1>Сделать проще</h1>
<div id="list">
<ul>

<li style="background-color: white;">тест 1</li>
<li>тест 2</li>
<li>тест 3</li>
<li>тест 4</li>
<li>тест 5</li>
</ul>

<ul>
<li>тест 6</li>
<li>тест 7</li>
<li>тест 8</li>
<li>тест 9</li>
<li>тест 10</li>
</ul>
</div>
</body>
</html>

Хочется сделать так, чтоб не пришлось пробегать по всему массиву  for(var i = 0; i < node.items.length; i++)   присваивая каждому элементу одну и ту же функцию на щелчок мыши, а присвоить onclick сразу для всех элементов массива. К сожалению со свойствами prototype и constructor я знаком плохо, так что прошу помощи у вас. Заранее благодарен.
PM MAIL   Вверх
SelenIT
Дата 6.2.2007, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Цитата(GF @  6.2.2007,  13:23 Найти цитируемый пост)
со свойствами prototype и constructor я знаком плохо

Боюсь, что IE принменительно к HTML-элементам знаком с ними еще хуже... А почему бы просто не ловить событие на самом диве?
Код

function selector(node){
      node.selected=node.getElementsByTagName('li')[0];
      node.onclick = function(e){
          ob = e ? e.target : event.srcElement;
          if (ob.tagName.toLowerCase() != 'li') return;
          ob.style.backgroundColor = 'white';    
          node.selected.style.backgroundColor = 'whitesmoke';    
          node.selected = ob;
      }
  }



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
GF
Дата 6.2.2007, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 30.8.2006

Репутация: нет
Всего: нет



SelenIT, это конечно вариант, но проблема состояла не в том, что моё вероисповедание не позволяет мне пользоваться циклом for. Я хотел разобраться, можно ли цеплять обработчик события ко всем элементам массива сразу, не пробегая по каждому элементу, а такой пример я привёл просто для наглядности. Есть ещё мысли? Или это нереально реализовать?
PM MAIL   Вверх
12345c
Дата 6.2.2007, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



В данном монастыре устав этого не позволяет. Ммм. Над объектами документа абстракция прототипа не действует, в чём легко убедиться, попытавшись записать
Код
Object.prototype.onmouseover=function(){alert(this.id);}

Зато все объекты JS приобретут это свойство:
Код
b=[1,2,3]
alert(b.onmouseover)
Но смысла события она иметь не будет. Да и слишком катастрофично это бы было - все объекты приобретают один обработчик. Нужна тогда иерархия классов, чтобы классу присвоить обработчик. В IE с этим с успехом справляется behavior.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0692 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.