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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> attachEvent, помогите разобраться с кодом 
:(
    Опции темы
3,14
Дата 25.8.2004, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

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



Код
<html>
  <script language="JavaScript">

   function click_event()
   {
     alert('CLICK');
   }

   function attach_click_event(obj)
   {
    obj.attachEvent('onclick', click_event);
   }    
  </script>
 
  <body onLoad='attach_click_event(this)'>
    test
  </body>

</html>


Открываю страницу в IE, при клике на документе ничего не происходит sad.gif


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Aliance
Дата 25.8.2004, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Смотря что именно нужно!
Если задача такая: необходимо проверять нажатия всех буквенно-цифровых клавиш до того, кк символ достиг поля формы, то иди сюда

А если нужно просто выводить click, когда пользователь нажал на одну из кнопок мыщи, то подойдет такая:
Код

function myFunction(evt) {
   evt = (evt) ? evt : ((window.event) ? event : null);
   if (evt) {
       if (evt.button) {
           if (evt.button == 2) {
               alert('click');
           }
       }
   }
}

//Она же, но для групп пользователей, использующих NN4
function myFunction(evt) {
   evt = (evt) ? evt : ((window.event) ? event : null);
   if (evt) {
       var rightButton = false;
       if ((evt.button && evt.button == 2) || (evt.which && evt.which == 3)) {
           rightButton = true;
       }
       if (rightButton) {
           alert('click');
       }
   }
}

Добавлено @ 19:47
______________________________________
Поменяй свою подпись!
PM MAIL WWW ICQ Skype   Вверх
Gold Dragon
Дата 26.8.2004, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Цитата
attachEvent(), detachEvent() поддержка IE5+

attachEvent("имяСобытия", ссылкаНаФункцию)
detachEvent("имяСобытия", ссылкаНаФункцию) 
 
Метод attachEvent() применяется, в основном, для определения поведения IE, но его можно также использовать для привязки обработчика событий к объекту.
Метод detachEvent() выполняет обратное действие. Он не может отключить события, привязка которых была выполнена в атрибутах дескриптора или установкой свойств события.

Пример:

myObject.onmousedown = setHilite
//равносильно
myObject.attachEvent("onmousedown", setHilite)

 
Возвращаемое значение
Булевого типа
 
Параметры
имяСобытия строка с именем события в кавычках
ссылкаНаФункцию идентификатор функции (без параметров)



Добавлено @ 07:46
Может так
Цитата
<html>
  <script language="JavaScript">
  function click_event()
  {
    alert('CLICK');
  }
  function attach_click_event(obj)
  {
    obj.attachEvent('onclick', click_event());
  }   
  </script>
  <body onLoad='attach_click_event(this)'>
    test
  </body>
</html>



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Gregof
Дата 26.8.2004, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



attachEvent работает так как и должен, но вот в качестве параметру в твою функцию передаётся указатель не на body.
Честно говоря я не знаю куда почему в данном случае ссылается this sad.gif

Можно сделать так :[s]
Код
<html>
 <script language="JavaScript">
 function click_event()
 {
   alert('CLICK');
 }
 function attach_click_event()
  {
   document.body.attachEvent('onclick', click_event);
  }
 </script>
 <body  onLoad="attach_click_event()" >
   test
 </body>
</html>

--------------------
Может поздно, может рано, нет у времени стоп-крана... (Чайф)
PM MAIL ICQ   Вверх
GoodBoy
Дата 26.8.2004, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



Цитата(Gregof @ 26.8.2004, 16:24)
Честно говоря я не знаю куда почему в данном случае ссылается this

this в данном случае ссылается на объект body.


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Gregof
Дата 26.8.2004, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да так оно и должно быть.
Но вот как понять это:

Этот код добавляет обработчик :
Код
...
function attach_click_event()
 {
  document.body.attachEvent('onclick', click_event);
 }
</script>
<body  onLoad="attach_click_event()" >
...

А этот - нет :
Код
...
function attach_click_event(par)
 {
  par.attachEvent('onclick', click_event);
 }
</script>
<body  onLoad="attach_click_event(this)" >
...



--------------------
Может поздно, может рано, нет у времени стоп-крана... (Чайф)
PM MAIL ICQ   Вверх
GoodBoy
Дата 26.8.2004, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



А к чему вообще такие сложности??? Почему нельзя сделать вот так:
Код
<script>
document.onclick=click_event;

function click_event() {
  ...
}
</script>



--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Aliance
Дата 26.8.2004, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



GoodBoy
Так нельзя. событие читается так:
Код

attachEvent("имяСобытия", ссылкаНаФункцию)

А спецификация W3C DOM (формально) поддерживает только 1 способ назначения функции-обработчика: метод addEventListener()

Пример:
document.getElementById("id").addEventListener("событие (без on)", ссылка_на_функцию, false)


Это сообщение отредактировал(а) Aliance - 26.8.2004, 18:49
PM MAIL WWW ICQ Skype   Вверх
Gregof
Дата 26.8.2004, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Можно конечно и так, можно наверно и сяк smile.gif

Мне просто интересно в чём загвоздка, что такое происходит с этим указателем или объектом на который он ссылается, что с его помощью в функции, куда его передали, не получается добавить обработчик события объекту.
--------------------
Может поздно, может рано, нет у времени стоп-крана... (Чайф)
PM MAIL ICQ   Вверх
GoodBoy
Дата 26.8.2004, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



Aliance
И почему это вдруг стало так нельзя???? У меня таким образом не в одном месте события перехватыаются и все великолепно работает!!!!!


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Aliance
Дата 26.8.2004, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



GoodBoy
Это не соответствует стандартам W3C DOM + если пользователь использует фрэймы - это тоже не подойдет smile.gif
PM MAIL WWW ICQ Skype   Вверх
GoodBoy
Дата 27.8.2004, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



Цитата(Aliance @ 26.8.2004, 20:53)
Это не соответствует стандартам W3C DOM

Очень может быть, но при этом великолепно работает!!! Не DOMом единым живет программист!!!!
:-))))))))))))))

Цитата(Aliance @ 26.8.2004, 20:53)
если пользователь использует фрэймы - это тоже не подойдет

Опять ты не прав!!! Возьми отсюда исходники моего текстового редактора и посмотри!!! Для iframe все великолепно работает!!! Точно так же будет работать и для фрейма!!!

Код
<html>
<head>
<title>HTML Editor 2.3</title>
<link rel="stylesheet" type="text/css" href="styles.css">
<script>

...

function initComp() {
  Composition.document.open();
  Composition.document.write(Body);
  Composition.document.close();
  Composition.document.designMode="On";
  Composition.document.onmousedown = getHTag;
  Composition.document.onmouseup = getSelection;
  Composition.document.onkeyup = getHTag;
  Composition.document.onkeydown = checkSelect;
  Composition.document.onkeypress = textHistory;
}

...

</script>
</head>

<body>

...

  <iframe class="Composition" width="100%" id="Composition" height="100%"></iframe>
  <script>
     initComp();
     Composition.focus();
  </script>
</body>
</html>




--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Aliance
Дата 27.8.2004, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



GoodBoy
Я имел ввиду, если эту функцию прописать на страницы с заданием фреймов, а функцию нужно вызывать только в каком-то одном, тогда document нужно заменить :-)
PM MAIL WWW ICQ Skype   Вверх
GoodBoy
Дата 27.8.2004, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



Цитата(Aliance @ 27.8.2004, 11:42)
Я имел ввиду, если эту функцию прописать на страницы с заданием фреймов, а функцию нужно вызывать только в каком-то одном, тогда document нужно заменить

Aliance, т. е. ты всетаки согласен с тем, что так сделать можно, а не нельзя, как ты писал раньше???

Цитата(Aliance @ 26.8.2004, 20:53)
если пользователь использует фрэймы - это тоже не подойдет


:-))))))))))))))))))))))))


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Aliance
Дата 27.8.2004, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



GoodBoy
Цитата(GoodBoy @ 27.8.2004, 11:09)
Цитата (Aliance @ 26.8.2004, 20:53)
если пользователь использует фрэймы - это тоже не подойдет

Не подойдет


Цитата(Aliance @ 26.8.2004, 17:40)
Так нельзя

Вот тут слово нельзя нужно заменить... smile.gif))

PM MAIL WWW ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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