Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.12.2011, 23:43
Профессор
Отправить личное сообщение для (Sandr) Посмотреть профиль Найти все сообщения от (Sandr)
 
Регистрация: 14.10.2010
Сообщений: 376

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


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

Это мне какой-то кастыль напоминает.. Есть ли другие варианты?
Ответить с цитированием
  #2 (permalink)  
Старый 18.12.2011, 23:56
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

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

elem.onclick= (function(arg1, arg2, arg3){ //создаём анонимную ф-цию, передаём ей обработчики
 return function(event){ // возвращаем ф-цию, она-то и будет обработчиком
  return doSmth(event, arg1, arg2, arg3); // выполняем нужную ф-цию, передаём ей event и нужные аргументы
  };
})(1, 2, 3); // вызываем созданную нами анонимную ф-цию, передавая ей нужные аргументы
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #3 (permalink)  
Старый 19.12.2011, 00:12
Профессор
Отправить личное сообщение для (Sandr) Посмотреть профиль Найти все сообщения от (Sandr)
 
Регистрация: 14.10.2010
Сообщений: 376

trikadin,
ойёй! Ужас!!1!1! Думаю теперь, что кастыль замыкание смотрится гораздо лучше))
Ответить с цитированием
  #4 (permalink)  
Старый 19.12.2011, 00:15
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

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

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

Ещё вы можете использовать библиотеки/фреймворки и передавать аргументы в обработчики с помощью них)
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #5 (permalink)  
Старый 19.12.2011, 00:31
Профессор
Отправить личное сообщение для (Sandr) Посмотреть профиль Найти все сообщения от (Sandr)
 
Регистрация: 14.10.2010
Сообщений: 376

trikadin,
не люблю пользоваться фрэймворками.. Люблю свои велосипеды писать)
Ответить с цитированием
  #6 (permalink)  
Старый 19.12.2011, 00:35
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

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

function doSomething(arg) {
    arg = arg || 'Спасибо!';
    alert(arg);
}
doSomething('hello!');
doSomething();
Ответить с цитированием
  #7 (permalink)  
Старый 19.12.2011, 01:29
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

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

Хотя у кого как) Обычно - именно так.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #8 (permalink)  
Старый 19.12.2011, 02:19
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Сообщение от (Sandr) Посмотреть сообщение
trikadin,
ойёй! Ужас!!1!1! Думаю теперь, что кастыль замыкание смотрится гораздо лучше))
Это не ужас. Это JavaScript.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #9 (permalink)  
Старый 19.12.2011, 03:28
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Nekromancer
Это не ужас. Это JavaScript.
Ответить с цитированием
  #10 (permalink)  
Старый 19.12.2011, 21:47
Профессор
Отправить личное сообщение для (Sandr) Посмотреть профиль Найти все сообщения от (Sandr)
 
Регистрация: 14.10.2010
Сообщений: 376

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

function doSomething(arg) {
    arg = arg || 'Спасибо!';
    alert(arg);
}
doSomething('hello!');
doSomething();
извиняюсь, но я совершенно не понял для чего вы мне это написали.. Как этот код поможет мне при запуске функции по событию "
document.getElementById('button').onclick = ..
" ?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установить имя конструктора Андрей Параничев Общие вопросы Javascript 8 17.11.2011 10:09
Как в браузерах реализуются функции DOM (например createElement) iamme Общие вопросы Javascript 7 02.09.2011 20:26
динамическое содержимое функции alfmaster Общие вопросы Javascript 2 28.05.2011 17:10
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21
Подскажите, как работает простой код (замыкание функции)? Dotod Общие вопросы Javascript 5 02.12.2009 04:03