Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 75
1

Объект в аргументе функции

22.05.2014, 21:53. Просмотров 846. Ответов 4
Метки нет (Все метки)

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
 window.onload = function () 
       {
            var F = document.getElementById("Id1");
            F.onmousemove = mouseMoveHandler;
            F.onmouseout = mouseOutHandler;
        }
       
 
        function mouseMoveHandler(e) {
            if (!e) e = window.event;
            Obk.show("Hi", e.clientX + 10, e.clientY + 10);
        }
Объясните пожалуйста, что за объект "e" в аргумент функции mouseMoveHandler попадает и откуда он берется?

Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2014, 21:53
Ответы с готовыми решениями:

Ошибка в аргументе функции
Всем хай, я бы хотел, чтобы аргумент name через свою функцию other передал значение Колян По...

Дублирование переменной в аргументе функции
Здравствуйте, случилась такая проблема, что когда я нажимаю на кнопку у меня вызывается функция. В...

Аналитичность функции, значение функции при заданном аргументе и выделение мнимой и вещ частей
Привет всем. Народ как поступил вообще в универ вообще мат не понимаю, хотя в школе было 5....

Ошибка в аргументе функции
Доброго времени суток. В университете дали такое задание: Составить программу на основе...

4
3226 / 2773 / 1394
Регистрация: 15.01.2014
Сообщений: 6,084
22.05.2014, 22:27 2
Цитата Сообщение от Makeda Посмотреть сообщение
что за объект "e" в аргумент функции mouseMoveHandler попадает
Event - объект события. Даже не знаю, что и добавить.
0
1 / 1 / 3
Регистрация: 17.04.2014
Сообщений: 39
23.05.2014, 02:09 3
Цитата Сообщение от Lazy_Den Посмотреть сообщение
Даже не знаю, что и добавить.
например то, что он передаётся неявно в качестве аргумента обработчику события (слушателю) при возникновении указанного события и то, что в некоторых старых браузерах объект события не передаётся автоматически, а доступен в качестве глобального свойства, поэтому внутри обработчика есть условие:
Javascript
1
if (!e) e = window.event;
0
103 / 103 / 48
Регистрация: 09.09.2010
Сообщений: 241
23.05.2014, 02:48 4
Если для совсем начинающих:
функция mouseMoveHandler не вызывается нашим кодом напрямую, например вот так: mouseMoveHandler(a,b,c);
Вместо этого мы назначили её обработчиком события, которое потом может возникнуть в браузере.
Когда браузер решит, что указанное при назначении обработчика событие уже возникло, он сам вызовет нашу функцию.
Функцию-обработчик мы назначить событию можем, а получаемые ею аргументы - нет.
Браузер всегда сам передаёт в обработчик события 1 аргумент типа "обьект" с разной интересной и полезной информацией.
Внутри функции этот объект (первый аргумент) будет под тем именем, которое мы задали при объявлении функции, в данном случае e.
А if (!e) e = window.event; - это для IE, там аналогичный объект аргументом не передаётся, а доступен в свойстве windiw.event
0
супермизантроп
Эксперт JS
3808 / 2895 / 681
Регистрация: 18.04.2012
Сообщений: 8,491
23.05.2014, 03:38 5
superpuper, тщательнее надо быть
window.event в Эксплорере - это объект, а никак не свойство, как написали вы
и у этого объекта действительно есть много разных свойств (не всегда "интересных и полезных", но есть )

в браузерах Mozilla зачем-то решили от этого объекта отказаться

поэтому и придумали маразм с передачей в функцию аргументом этого как бы несуществующего объекта события
т.е. если функция вызывается каким-то браузерным событием, то браузер сам добавляет к списку аргументов ещё и объект события

но совсем отказаться от event не получилось - ибо события обрабатывать как-то надо...
если прописывать обработку события прямо в атрибуте тега, то это несуществующее событие появляется:
<div style="width: 234px; height: 123px; background: red" onclick="event.target.innerHTML = event.type"></div>
и прописывать здесь event надо именно так - в этом же регистре
самое смешное, что если заменить это дело вызовом функции, то тоже надо писать именно event, иначе не сработает:
<div style="width: 234px; height: 123px; background: red" onclick="myFunc (event)"></div>
<script>
function myFunc (e) {e.target.innerHTML = e.type}
</script>


если просто обернуть код, прописанный в onclick, в функцию - тоже будет ошибка

в общем, полный отстой эта мозилловская фигня с якобы несуществующим объектом event
------------

и вообще в Mozilla любят добавлять всякую фигню в качестве аргументов
причём в самое неподходящее место
например, в функцию, имя которой используется в таймерах, засовывают какое-то "запаздывание исполнения"
т.е. если прописать setTimeout (myFunc, 1000),
то внутри функции всегда можно вытащить этот аргумент
function myFunc () {
alert (arguments [0]);
//
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2014, 03:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Использование указателя в аргументе функции
Почему в аргументе написали &quot;const char* filename&quot;, а не &quot;string filename&quot;? lua_State *...

Ссылка на указатель в аргументе функции
при изучении примеров реализации бинарного дерева(в функции добавления нового узла)я увидел,что...

Чем отличаются указатель в теле функции и в аргументе
Здравствуйте. Не могу разобраться чем, в данном случае: bool LexAnalysis(const char* text) {...

Вызов функции другого класса, принимаемой в аргументе
помогите, пожалуйста, как реализовывать правильно такое(и возможно ли?) в классе...

Вычислить значение функции в точке Y, при заданном аргументе X
И снова привет . Ребят помогите решить еще 1 задание. Заранее спасибо :)

Программа для вычисления квадратного корня. Ошибка компиляции в аргументе функции
Всем привет, программа для вычисления квадратного корня. Не компилируется из за вызова функции...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.