Функция назначенная обработчику события срабатывает сразу
Доброго вечера уважаемые коллеги. Подскажите пожалуйста почему, когда я назначаю функцию обработчику события и передаю ей параметр она сразу же срабатывает после загрузки страницы, а не по самому событию ?
document.getElementById('jscroll_2').onclick = elmYPosition('contacts'); function elmYPosition(eID) { var elm = document.getElementById(eID); var y = elm.offsetTop; alert(y); } Срабатывает сразу же после загрузки страницы и после на клики не реагирует. Вопрос очень банальный (чувствую) но не могу никак с этим справиться. Помогите пожалуйста. |
Velidan,
потому что в onclick у вас результат функции а не ссылка на функцию document.getElementById('jscroll_2').onclick = elmYPosition('contacts'); function elmYPosition(eID) { return function() { var elm = document.getElementById(eID); var y = elm.offsetTop; alert(y); } } |
Разве в учебниках по программированию не учат, что чтобы вызвать функцию, нужно поставить после ее имени скобочки? Соответственно, если после имени стоят скобочки - значит это вызов функции?
|
Спасибо большое за ответы.
Конечно учат. В php только так и можно. Почему я сделал без скобочек. Потому что подсмотрел в одном скрипте такой вызов: document.getElementById("desc").onclick = activateSlider; document.getElementById("web").onclick = activateSlider; document.getElementById("mobile").onclick = activateSlider; Подумал, что это правильно. + http://www.cyberforum.ru/javascript/thread867501.html (4 ответ) рекомендует делать вызов таким образом. Аналогично здесь: http://hashcode.ru/questions/220339/...B5-%D0%B2-html Рони подскажите пожалуйста: Правильно вызывать функцию по событию таким образом: document.getElementById("desc").addEventListener('click', elmYPosition('contacts'), false); Помогите пожалуйста разобраться раз и навсегда с этим вопросом. |
document.getElementById("desc").addEventListener(' click', elmYPosition('contacts'), false);
вызов происходит сразу document.getElementById("desc").addEventListener(' click', elmYPosition, false); так только после клика , если нужно передать аргумент тогда делай так document.getElementById("desc").addEventListener(' click', function(){elmYPosition('contacts')}, false); |
Спасибо огромное за помощь ребята.
Честно говоря, немного мудреные конструкции, особенно в случае передачи параметра (оборачивание вызова в анонимную функцию удивило. Сам бы не додумался) |
Цитата:
Поскольку нет собственно вызова функций. Но как только ты начнешь использовать круглые скобки - все! Это уже вызов функции... ;) |
Цитата:
http://javascript.ru/tutorial/events/crossbrowser |
Спасибо огромное за разъяснение и подсказку где читать.
|
document.getElementById('jscroll_2').onclick = elmYPosition.bind(this, 'contacts'); |
Часовой пояс GMT +3, время: 19:44. |