Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Функции в событиях (https://javascript.ru/forum/misc/24137-funkcii-v-sobytiyakh.html)

(Sandr) 18.12.2011 23:43

Функции в событиях
 
Читаю эту статью http://javascript.ru/tutorial/events...voystvo-obekta
Там есть код:
function doSomething() {
    alert('Спасибо')
}
document.getElementById('button').onclick = doSomething


Но вот появился вопрос, что если в функцию doSomething() мне нужно передать несколько аргументов? Как быть?
Делать постоянно так:
document.getElementById('button').onclick = function() { doSomething('значение_аргумента'); }

Это мне какой-то кастыль напоминает.. Есть ли другие варианты?

trikadin 18.12.2011 23:56

Цитата:

Сообщение от (Sandr)
Это мне какой-то кастыль напоминает.. Есть ли другие варианты?

Это напоминает замыкание)) Есть вариант (лучше) делать вот так:

elem.onclick= (function(arg1, arg2, arg3){ //создаём анонимную ф-цию, передаём ей обработчики
 return function(event){ // возвращаем ф-цию, она-то и будет обработчиком
  return doSmth(event, arg1, arg2, arg3); // выполняем нужную ф-цию, передаём ей event и нужные аргументы
  };
})(1, 2, 3); // вызываем созданную нами анонимную ф-цию, передавая ей нужные аргументы

(Sandr) 19.12.2011 00:12

trikadin,
ойёй! Ужас!!1!1! Думаю теперь, что кастыль замыкание смотрится гораздо лучше))

trikadin 19.12.2011 00:15

Цитата:

Сообщение от (Sandr)
ойёй! Ужас!!1!1! Думаю теперь, что кастыль замыкание смотрится гораздо лучше))

Я тоже в первый раз смотрел: это что?)

А тот код, что я вам скинул - тоже построен на замыканиях.

Ещё вы можете использовать библиотеки/фреймворки и передавать аргументы в обработчики с помощью них)

(Sandr) 19.12.2011 00:31

trikadin,
не люблю пользоваться фрэймворками.. Люблю свои велосипеды писать)

melky 19.12.2011 00:35

Цитата:

Сообщение от (Sandr) (Сообщение 144251)
Это мне какой-то кастыль напоминает.. Есть ли другие варианты?

использовать "аргумент по-умолчанию"

function doSomething(arg) {
    arg = arg || 'Спасибо!';
    alert(arg);
}
doSomething('hello!');
doSomething();

trikadin 19.12.2011 01:29

Цитата:

Сообщение от (Sandr)
не люблю пользоваться фрэймворками.. Люблю свои велосипеды писать)

Это ненадолго, если станете профессионально заниматься js-программированием...

Хотя у кого как) Обычно - именно так.

Nekromancer 19.12.2011 02:19

Цитата:

Сообщение от (Sandr) (Сообщение 144263)
trikadin,
ойёй! Ужас!!1!1! Думаю теперь, что кастыль замыкание смотрится гораздо лучше))

Это не ужас. Это JavaScript.

FINoM 19.12.2011 03:28

Цитата:

Сообщение от Nekromancer
Это не ужас. Это JavaScript.

:D

(Sandr) 19.12.2011 21:47

Цитата:

Сообщение от melky (Сообщение 144274)
использовать "аргумент по-умолчанию"

function doSomething(arg) {
    arg = arg || 'Спасибо!';
    alert(arg);
}
doSomething('hello!');
doSomething();

извиняюсь, но я совершенно не понял для чего вы мне это написали.. Как этот код поможет мне при запуске функции по событию "
document.getElementById('button').onclick = ..
" ?


Часовой пояс GMT +3, время: 16:30.