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 = ..
" ?

(Sandr) 19.12.2011 21:52

Цитата:

Сообщение от trikadin (Сообщение 144298)
Это ненадолго, если станете профессионально заниматься js-программированием...

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

Возможно) Просто у меня бессонница по ночам, если в моём коде что-то чужое :) Ну а если всерьёз, то действительно не люблю использовать чужие коды, всегда хочется переписать, хотя это занимает большое количество времени + если ещё не на должном уровне знаешь язык, так в 2не больше..

(Sandr) 19.12.2011 21:54

Nekromancer, начинаю думать, что все любители js немного извращенцы))
/*и тут весь форум закидыват меня тухлыми помидорами :)*/

nerv_ 19.12.2011 21:57

Цитата:

Сообщение от (Sandr)
начинаю думать, что все любители js немного извращенцы))

Во мне можете не сомневаться :D

trikadin 19.12.2011 22:00

Цитата:

Сообщение от nerv_
Во мне можете не сомневаться

+1)

GuardCat 19.12.2011 22:07

trikadin, скажите, а эта обёртка вокруг моего любимого «костыля», только затем, чтобы event передать или есть ещё что-то?

Хм. Хотя из первоначального кода и без обёрток передаётся event. Намекните, зачем обёртки?

trikadin 19.12.2011 22:14

Цитата:

Сообщение от GuardCat
trikadin, скажите, а эта обёртка вокруг моего любимого «костыля», только затем, чтобы event передать или есть ещё что-то?

Ещё затем, чтобы переменные сохранялись в скопе этой ф-ции. Например, пощёлкайте по квадратам:

<div style="width: 100px; height: 100px; background: red" id="div1"></div>
<div style="width: 100px; height: 100px; background: green; margin-top: 5px;" id="div2"></div>
<script>
var i= 4;
document.getElementById("div1").onclick=function(event){alert(i)};
document.getElementById("div2").onclick=(function(num){
 return function(event){alert(num);}
})(i);
i= 100;
</script>

GuardCat 19.12.2011 22:31

trikadin, понял, спасибо.

trikadin 19.12.2011 22:32

GuardCat, да было бы за что...

Livanderiaamarum 19.12.2011 22:48

Цитата:

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

ты че вообще хочешь? у тя проблемы какие-то те не нравится синтаксис языка или че??? В ЧЕМ ТВОЯ ПРОБЛЕМА ВЫРАЖАЙСЯ ТОЧНЕЕ!!!!!

в функцию аргументы передаются через запятую в скобках!!! в чем проблема??????

trikadin 19.12.2011 22:54

Livanderiaamarum, научитесь писать без излишней жирности.

И сдерживайте свою агрессию.

Livanderiaamarum 19.12.2011 22:55

Цитата:

Сообщение от trikadin (Сообщение 144567)
Livanderiaamarum, научитесь писать без излишней жирности.

И сдерживайте свою агрессию.

зачем? я намеренно пишу жирно

trikadin 19.12.2011 22:59

Цитата:

Сообщение от Livanderiaamarum
я намеренно пишу жирно

Я искренне рад, что это сознательный импульс, а не неосознанный.

Но это затрудняет чтение, раздражает, вызывает негативные эмоции и сомнения в адекватности писавшего. Научитесь не выделять текст без особой на то необходимости. В вашем случае необходимости не было - подчёркивать смысловую нагрузку того предложения было незачем, и превратно понято без этого выделения оно быть не могло. Смекаешь?

Livanderiaamarum 19.12.2011 23:04

Цитата:

Сообщение от trikadin (Сообщение 144569)
Я искренне рад, что это сознательный импульс, а не неосознанный.

Но это затрудняет чтение, раздражает, вызывает негативные эмоции и сомнения в адекватности писавшего. Научитесь не выделять текст без особой на то необходимости. В вашем случае необходимости не было - подчёркивать смысловую нагрузку того предложения было незачем, и превратно понято без этого выделения оно быть не могло. Смекаешь?

по моему все адекватно, я выделил крик и грубую интонацию

trikadin 19.12.2011 23:09

Цитата:

Сообщение от Livanderiaamarum
по моему все адекватно, я выделил крик и грубую интонацию

Цитата:

Сообщение от trikadin (Сообщение 144567)
сдерживайте свою агрессию.

Не надо кричать и грубить. Тот человек ничего плохого не написал)

А гопников от языка тут не нужно.

Nekromancer 19.12.2011 23:47

trikadin,
Это просто новый вид тролля, так сказать next level. Он троллит, но чёрт побери осознанно. И если бы ещё ему побольше адекватности, может быть сошёл бы за нормального человека.

Livanderiaamarum 20.12.2011 00:04

Цитата:

Сообщение от Nekromancer (Сообщение 144581)
trikadin,
Это просто новый вид тролля, так сказать next level. Он троллит, но чёрт побери осознанно. И если бы ещё ему побольше адекватности, может быть сошёл бы за нормального человека.



спасибо( ...

melky 20.12.2011 00:12

Цитата:

Сообщение от Nekromancer (Сообщение 144581)
trikadin,
Это просто новый вид тролля, так сказать next level. Он троллит, но чёрт побери осознанно. И если бы ещё ему побольше адекватности, может быть сошёл бы за нормального человека.

ему бы перестать думать, что у него яйца круче всех :) отсюда всё идёт.

(Sandr) 20.12.2011 00:31

Livanderiaamarum,
"ты че вообще хочешь?", свою проблему я описал выше.
".. не нравится синтаксис языка или че???", очень даже нравится :)
"в функцию аргументы передаются через запятую в скобках!!!", спасибо, я об этом подозревал)
Я понимаю, что скорее всего я вас раздражаю своими глупыми вопросами. Но прошу, если они вам так не нравятся, то просто не заходите в тему и всё) Ведь я никого не заставляю дать мне объяснения, я лишь прошу тех кто может(хочет) помочь.

(Sandr) 20.12.2011 00:34

Nekromancer,
"Он троллит, но чёрт побери осознанно.", а разве есть толли, которые тролят неосознанно?))

melky 20.12.2011 00:37

Цитата:

Сообщение от (Sandr) (Сообщение 144607)
Nekromancer,
"Он троллит, но чёрт побери осознанно.", а разве есть толли, которые тролят неосознанно?))

да. я на семинаре, когда отвечал, прослушал вопрос препода. наклонился к нему и перепсросил шёпотом. он озлобился и сказал, что так не надо делать. над ним долго ржали одногруппники.

итог : цель озлоблена, получены лулзы => я тролль ; ну а т.к. я это делал неосознанно => я троллящий неосознанно :)

Livanderiaamarum 20.12.2011 00:37

Цитата:

Сообщение от (Sandr) (Сообщение 144607)
Nekromancer,
"Он троллит, но чёрт побери осознанно.", а разве есть толли, которые тролят неосознанно?))

70% людей тролли)

trikadin 20.12.2011 00:46

Цитата:

Сообщение от Livanderiaamarum
70% людей тролли)

Пруф, пожалуйста)

Livanderiaamarum 20.12.2011 01:04

Цитата:

Сообщение от trikadin (Сообщение 144617)
Пруф, пожалуйста)

сию момент
http://webcache.googleusercontent.co...t=clnk &gl=ru

Nekromancer 20.12.2011 11:29

Livanderiaamarum,
Линк не прочёл. Но видимо по этому вы считаете своим долгом быть троллем?

П.С. Вот у меня например на работе человек осознанный тролль, он сидит в рабочее время и троллит на всяких форумах по PlayStation. Не могу понять какое моральное удовлетворение он от этого получает, но после этого он мне стал гораздо меньше нравится.

melky 20.12.2011 11:42

он "энергетический вампир". ему на душе становится тепло и хорошо, когда он кого-то вынудит разозлиться/обидеться.


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