Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Установка аттрибута onClick методами DOM
 
 автор: MRE   (30.06.2007 в 18:45)   письмо автору
 
 

Устанавливаю аттрибут следующим образом:


img1.setAttribute("onClick","addPrivate('" + itemArray.item(i).firstChild.data + "');");


Не устанавливается, в чем дело и как его установить?

   
 
 автор: MRE   (30.06.2007 в 19:14)   письмо автору
 
   для: MRE   (30.06.2007 в 18:45)
 

Попробовал:


img1.onClick = addPrivate(itemArray.item(i).firstChild.data);


Но отрабатывает не при клике, а при выполнении этой строчки.

   
 
 автор: CNT   (30.06.2007 в 19:23)   письмо автору
 
   для: MRE   (30.06.2007 в 18:45)
 

ONCLICK - не атрибут, а предсобытие.
В Эксплорере устанавливается методом attachEvent ('предсобытие', функция)
В Мозилле - addEventListener ('событие', функция, кратность)

   
 
 автор: MRE   (30.06.2007 в 20:04)   письмо автору
 
   для: CNT   (30.06.2007 в 19:23)
 


                    img1.attachEvent('onClick',addPrivate(itemArray.item(i).firstChild.data));


Все равно не выходит, ошибку выдает.
Или что-то не так делаю?

   
 
 автор: MRE   (30.06.2007 в 20:11)   письмо автору
 
   для: MRE   (30.06.2007 в 20:04)
 

И так попробовал:


    img1.attachEvent('onClick',function(){addPrivate(itemArray.item(i).firstChild.data)});


Ошибки нет, но и результа нет, при клике ничего не происходит.
Хотя если в html напрямую прописать, то все ок.

   
 
 автор: MRE   (30.06.2007 в 20:22)   письмо автору
 
   для: MRE   (30.06.2007 в 20:11)
 

Элемент добавляю динамически аяксом.

   
 
 автор: CNT   (30.06.2007 в 20:37)   письмо автору
 
   для: MRE   (30.06.2007 в 20:11)
 

В HTML-коде можно написать следующее:
<span id="mySpan" onclick="this.style.color = 'red';">кликни - покраснею</span>
И всё будет замечательно работать.

А вот если инструкцию на событие CLICK "навешивать" скриптом, то использовать this уже будет нельзя, ибо для функции this - это она сама и есть. Необходимо будет в функции или напрямую обращаться к объекту mySpan:
<span id="mySpan">кликни - покраснею</span>

<script>
document.all.mySpan.attachEvent ('onclick', function () {document.all.mySpan.style.color = 'red'})
</script>

или же, если надо будет нескольким объектам "навесить" одну и ту же функцию, необходимо будет вычислять объект на который кликнули:
<span id="mySpan">кликни - покраснею</span>
<span id="otherSpan">и я тоже - покраснею</span>

<script>
function myFunc () {event.srcElement.style.color = 'red'}
document.all.mySpan.attachEvent ('onclick', myFunc);
document.all.otherSpan.attachEvent ('onclick', myFunc);
</script>

Мысль уловили?
Функция работает только с глобальными объектами.

Очень я сомневаюсь, что переменная i у вас объявлена глобальной на момент приаттачивания функции.

   
 
 автор: MRE   (30.06.2007 в 21:06)   письмо автору
 
   для: CNT   (30.06.2007 в 20:37)
 

Код:

                    all_online = getElementById('online');
                    img1 = document.createElement('img');
                    img1.setAttribute("src","pic/arrow.gif");
                    img1.setAttribute("id","a0");
                    all_online.appendChild(img1);
//                  img1.attachEvent('onClick',function(){addPrivate(itemArray.item(i).firstChild.data)});
                    document.getElementById('a0').onClick = function(){addPrivate(itemArray.item(i).firstChild.data);};
//                    img1.onClick = function(){addPrivate(itemArray.item(i).firstChild.data)};


Как я только не пробовал - не получается, возможно динамическое изменение страницы не допускает навешивание событий на динамически добавляемые теги, у меня ведь этот код выполняется не при загрузке страницы, а после некоторых событий и посылки запроса аяксом.
Если есть решение этой проблемы - скажите.

   
 
 автор: CNT   (30.06.2007 в 21:21)   письмо автору
 
   для: MRE   (30.06.2007 в 21:06)
 

Однако, мысль мою вы не уловили.
Попробую объяснить так:
<script>
var all_online = document.getElementById ('online');
var img1 = document.createElement ('img');
with (img1)
   {
   src = "pic/arrow.gif";
   id = "a0";
   attachEvent ('onclick', function () {alert ('Браузер не знает, что такое i')}});
   }
all_online.appendChild (img1);
</script>

   
 
 автор: MRE   (30.06.2007 в 21:44)   письмо автору
 
   для: CNT   (30.06.2007 в 21:21)
 

Без локальных переменных даже:
                    all_online = document.getElementById ('online'); 
                    img1 = document.createElement('img');
                    img1.setAttribute("src","pic/arrow.gif");
                    img2 = document.createElement('a');
                    img2.appendChild(img1);
                    all_online.appendChild(img2);
                    img2.attachEvent('onClick',function(){alert("234");});
                    img2.onClick = function(){alert("234");};


В опере выводятся оба алерта, а в IE6 нет.

   
 
 автор: MRE   (30.06.2007 в 21:56)   письмо автору
 
   для: MRE   (30.06.2007 в 21:44)
 

Блин столько времени потратил, а оказалось, что onClick надо было писать onclick.
Почему так все плохо?

Поясните о чувсвительности к регистру, ведь в коде напрямую я писал с большой и все ок было.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования