| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > Глобальный объект события |
| Автор: Иль 21.4.2005, 19:53 | ||
Я не пойму что такое ev и что хранится в этой переменной или объекте. |
| Автор: Aliance 21.4.2005, 20:09 |
| Это аргумент! У меня он обычно называется evt; У Сара - ev... называй как хочешь |
| Автор: Sardar 21.4.2005, 20:33 | ||||
Просто создаём функцию, идеентично function(event) {...
IE отличается от всего мира тем что обьект событие храниться в window.event(тем самым отемняя предпологаемую многопоточность), все другие отдают сей обьект первым аргументом, у меня это ev |
| Автор: Иль 22.4.2005, 07:48 | ||||
Понятно, значит вид задания функции непринципен Вроде понял. И понял вот так. В Геках у нас всегда висит глобальный объект в котором хранятся свойства событий и называется он event, а в ИЕ мы его получаем как подобъект window Но тогда непонятно следующее:
Как Гекоподобные сообразят, что на место ev надо подставить event? Что, получается, что единствинный параметр который может передаваться в обработчик событий это event и поэтому браузеры семейства Геко автоматически подставляют в tag.onclick=function(ev) объект event на место ev. Если это так то все понятно, если нет, то как иначе может быть |
| Автор: Aliance 22.4.2005, 11:20 | ||||
Под IE он написан 8))
Спасибо за замечание. Исправил. Еще раз: Обработчики событий по стандарту W3C DOM получают ссылку на объект события через параметр (аргумент), в то время как в IE DOM этот объект event является свойством объекта window. |
| Автор: Sardar 22.4.2005, 13:21 | ||||||||||
Для Оперы 6 принципиален, т.к. она(в виду своей отстойности в плане скриптов) не подерживает конструкцию new Function.
Нет, в Мозилле обьект событие передаётся только обработчику события, ни в каком глобальном контесксте обьект не существует(если ты его только не запишешь). Повторю ИЕ хранит текущий обьект события в window.event, т.е. одновременно два события зажечся не могут. В Мозилле и других W3C подобных обьект событие передаётся первым параметром функции обработчика события. Пофигу как сей параметр зовётся. Если же ты делаешь inline событие то происходит такой фокус:
И еще раз повторю, браузер передаёт обьект событие первым параметром функции и пофигу как сей параметр зовётся. Да, ты можешь определить сколь угодно параметров, но браузер передаст только один(а какую инфу еще передавать? ). Ты можешь сам потом вызвать обработчика события в ручную как myobject.onclick(<сохранённый заранее event>, <твои параметры>); - и передать сколь угодно параметров. Надеюсь что теперь всё ясно. Главное не думать что в JS есть куча магии как в VB, нет здесь всё просто и логично и правила языка для всех(даже для встроенных фич) едины. |
| Автор: Иль 22.4.2005, 16:40 |
| Хорошо. Вникаю... Про интерфейс тоже понятно, это видимо имеется ввиду: у кого target, а у кого и scrElement будет? А остальноу буду доучивать по вашей статье. Крайне нуждаюсь в умении вызывать событие из скрипта (активировать). Я прочитал только 1/3 статьи, надеюсь дальше эта активация есть. |
| Автор: Иль 22.4.2005, 17:09 |
| Про активацию события из скрипта не нашел. Что посоветуете и есть ли это в интерфейсе window.event (знаю только W3C)? |
| Автор: Иль 22.4.2005, 17:19 | ||
| Извините, все работает. Запутался в if ... else Если кто не знает, то чтоб не разбираться с DOM можно воспользоваться топором
|
| Автор: Sardar 22.4.2005, 17:33 | ||
Да там не только это, собстна только в последних разработках(когда W3C взялось за повозку) баузеры начали быть совместимыми. В ИЕ до сих пор нет человеческой модели событий W3C, приходится извращаться. Как понять "активировать событие"? Можно вызвать обработчик события у обьекта в ручную, можно вызвать один из стандартных методов, например click() для кнопки, можно заюзать у document'а (createEvent)Mozilla - (createEventObject/fireEvent)IE для создания любого события... Мозилла страдает отсутствием точной доки(нужно поискать), а для ИЕ как всегда на MSDN: http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/createeventobject.asp http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/fireevent.asp Добавлено @ 17:34 Упс, ты уже ответил сам себе |
| Автор: Иль 23.4.2005, 08:57 | ||||
Sardar
Без on чтоли? Недопонял, как это? А какие есть варианты. Можно без примеров, на словах поподробнее, ведь
не один же способ |
| Автор: Aliance 23.4.2005, 09:14 | ||
Есть обработчик события, есть ссылка на событие, есть вызов события - и все это разные вещи! Префикс on нужен только в простейшем inline объявлении или обращении к св-во объекта window. Есои событие имеется ввиду как метод - префикс не нужен уже 8)) |
| Автор: Иль 23.4.2005, 09:31 | ||
А! Понял, тоесть можно писать
Если нет, то где используется без on |
| Автор: Aliance 23.4.2005, 13:41 |
| Нет. Это не есть одно и тоже. Когда при написании сценария необходимо обратиться к событию, тогда-то и используется имя события с префиксом on. Например, при подтверждении формы кнопка получает событие click, но для его установки нужно используется имя onclick. ЗЫ: сам говорил что тема для тебя не понятная в данной статье - теперь она становится еще более непонятной - разделяю на две. СУВ. |
| Автор: Sardar 23.4.2005, 15:48 | ||
Поясню на примере:
Как видим метод click у кнопки есть один из его стандартных методов. Если ты определишь событие onmyevent, это не значит что появится метод myevent зажигающий это событие, повтрою еще раз: в JS нет(нет!, нет!!, нет!!!) магии Что клик по кнопке, что метод click генерят одинаковое событие на кнопке. Мы также можем вызвать обработчика события в ручную, но только для традисионных обработчиков. Добавив обработчика через addEventListener мы получить прямую ссылку на него уже не можем. |