JS addEventListener - способ указания функции.
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
JS addEventListener - способ указания функции. - 2009-12-30 08:58:27.023333
|
|
|
mr_Anderson
Сообщений: 140
Оценки: 0
Присоединился: 2008-11-29 19:52:02.186666
|
Если я хочу прикрутить к элементу обработчик события(например нажатия кнопочки), то я могу написать так: //Способ 1)
input.addEventListener('keypress', navigation, false);
function navigation(){
//...
} Могу написать вот так: //Способ 2)
input.addEventListener('keypress', function(event){navigation(event)}, false);
function navigation(){
//...
}
Раньше я думал, что это одно и то же. Оказывается - нет. Дело в том, что я что то где то накрутил в своём коде и теперь, при событии keypress у меня не запускается исполняющая функция navigation. Но не запускается она если я указал её в addEventListener первым способом. При указании вторым способом она нормально отрабатывает. Так значит в этих двух способах есть какое то принципиальное различие. Хотелось бы знать - какое…
|
|
|
RE: JS addEventListener - способ указания функции. - 2009-12-30 09:34:17.720000
|
|
|
Papa James
Сообщений: 438
Оценки: 0
Присоединился: 2009-12-07 13:36:18.370000
|
Если в javascript ты пишешь название функции со скобками - то возвращается результат выполнения этой функции. Если без - то не возвращается. Ну это я упрощенно описал. Допустим, в jquery
$('input').keypress(function(e){ test(e)})
где test(e), допустим, проверяет код введенной клавиши и возвращает истину или ложь (можно или нет вводить символ) будет срабатывать, но будут печататься все символы.
$('input').keypress(function(e){return test(e)})
Будет работать верно. Кстати, попробуй в первом примере поставить скобки у названия функции - будет работать? Объяснил, как смог )
|
|
|
RE: JS addEventListener - способ указания функции. - 2009-12-30 13:47:07.156666
|
|
|
mr_Anderson
Сообщений: 140
Оценки: 0
Присоединился: 2008-11-29 19:52:02.186666
|
quote:
Если в jаvаsсript ты пишешь название функции со скобками - то возвращается результат выполнения этой функции…. Ну дык моя же функция - она и не возвращает ни чего. Её предназназение оперировать стилем следующей/предыдущей строчки, допустим, некоторой таблицы… Я конечно попробовал первый пример со скобками, но, как и ожидалось, ни чего не вышло. Кстати, в IE функция срабатывает нормально. Определяю я её обычным первым способом:input.attachEvent('onkeydown', navigation);
|
|
|
RE: JS addEventListener - способ указания функции. - 2009-12-30 14:12:59.953333
|
|
|
mr_Anderson
Сообщений: 140
Оценки: 0
Присоединился: 2008-11-29 19:52:02.186666
|
…Да, ЯваСкрипт не перестаёт удивлять своей ухищрённостью и излишней(для меня-новичка) мудрёностью. Не успел я до конца разобраться с установкой обработчиков событий, как вляпался в проблему с так называемыми замыканиями. Оказывается переменные отработавшей функции, если на них ссылались вложеные ф-ии, - они не умерают и при повторном вызове этой ф-ии могут ещё дать о себе знать. При чём весьма неожиданно… А что бы этого не происходило, я должен это учитывать, не допускать такие "незаконные связи" в будущем и отловить уже существующие… Неужели мне когда то всё это будет нравиться и за сегодняшними проблемами я буду видеть потенциал, мощьность и неисчерпаемые возможности великого и могучего JS?!…. И при всём при этом тут ещё и это… слово ругательное - не хочется называть… кроссбраузерность! Обалдеть, товарищи!.. Лучше б я на скрипке играл…)))
|
|
|
RE: JS addEventListener - способ указания функции. - 2009-12-30 23:10:43.980000
|
|
|
Papa James
Сообщений: 438
Оценки: 0
Присоединился: 2009-12-07 13:36:18.370000
|
ну замыкания всегда надо учитывать - это факт, и не использовать в функциях глобальных переменных без надобности… А кроссбраузерность… IE давно надо запретить использовать
|
|
|
RE: JS addEventListener - способ указания функции. - 2010-01-01 05:04:42.456666
|
|
|
YellowRiver
Сообщений: 214
Оценки: 0
Присоединился: 2007-09-02 20:34:27.313333
|
Ничего в этом нет сложного, переменные можно создать везде, где тебе угодно, даже внутри функции Отработанная функция - это просто код, который работает на своём уровне и создаёт переменные у себя Одинажды созданная переменная, где бы она не находилась, будет существовать всегда, можно менять её значение, и т д… Функции в жабаскрипте - это объекты, которые содержат код, который может быть исполнен и всё Если исполнить код, то объект же не удалиться, а значит и переменные внутри него Кстати, нифтыкаю, а почему бы просто не сделать input.onkeydown=function(event){ // код } Намного проще и никаких дополнительных методов
|
|
|
RE: JS addEventListener - способ указания функции. - 2010-01-08 16:10:21.190000
|
|
|
mr_Anderson
Сообщений: 140
Оценки: 0
Присоединился: 2008-11-29 19:52:02.186666
|
quote:
input.onkeydown=function(event){… - А что, и так можно?… А зачем тогда вообще addEventListener?…..[:-]
|
|
|
|
|