Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/75: Рейтинг темы: голосов - 75, средняя оценка - 4.87
 Аватар для Heleg
209 / 209 / 6
Регистрация: 23.10.2011
Сообщений: 971

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

19.06.2012, 12:44. Показов 14512. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
JavaScript
1
element.click = func(parameter1,parameter2)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.06.2012, 12:44
Ответы с готовыми решениями:

Как передать событию OnClick функцию с параметром?
Добрый вечер. Разбираюсь с RunTime в Lazarus. В ini файле хранится список приложений, которые должны будут запускаться по клику на TLabel....

Как передать параметры в функцию
Пытался разобраться как передавать параметры в функцию. Если в C всё понятно func(1,2,3) То в bash так и не понял как это реализовано. ...

Как передать параметры через функцию?
Кто-нибудь знает как передать параметры через функцию ChildPanelOnCentral("vision/Rectangle/New2.pnl", "", ...

16
37 / 37 / 6
Регистрация: 20.11.2011
Сообщений: 194
19.06.2012, 12:59
Цитата Сообщение от Heleg Посмотреть сообщение
JavaScript
1
element.click = func(parameter1,parameter2)
функция принимает аргументы, а параметры - это локальные переменные функции, которым передаются значения аргументов
0
 Аватар для Heleg
209 / 209 / 6
Регистрация: 23.10.2011
Сообщений: 971
19.06.2012, 15:51  [ТС]
точно, аргументы

Добавлено через 2 часа 41 минуту
никто не знает, как передать аргументы в функцию?
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
19.06.2012, 16:45
JavaScript
1
element.click = function () {func (parameter1, parameter2)}
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
19.06.2012, 19:02
Heleg, в современном javascript так:
JavaScript
1
element.click = func.bind(element, parameter1, parameter2)
Работает во всех современных, в том числе мобильных браузерах. IE10+
0
 Аватар для Heleg
209 / 209 / 6
Регистрация: 23.10.2011
Сообщений: 971
20.06.2012, 17:19  [ТС]
kalabuni, ok, а как передать туда this?
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
21.06.2012, 08:13
Heleg, bind как раз первым аргументом принимает значение this. Вообще, еще часто нужно передать событие и, желательно, кроссбраузерно. В старом js придётся так:
JavaScript
1
2
3
4
5
element.click = function (e) {
  e = e || window.event;                                  // кроссбраузерно получаем событие
  if (e.srcElement && !e.target) e.target = e.srcElement; // кроссбраузерно устанавливаем элемент, на котором произошло событие
  func.call(this, e, parameter1, parameter2);             // передаём this и подготовленное событие
}
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
21.06.2012, 09:31
Heleg, см. предыдущий совет от гвардейского кота.
Только:
1) уберите совсем ненужный здесь call
2) переменную e сделайте локальной - var e = e || window.event;
3) пропишите onclick вместо click


Кроме того, строку
if (e.srcElement && !e.target) e.target = e.srcElement;
можно вообще убрать, а функции func () вместо this передайте e.target || e.srcElement
Так оно покороче будет.
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
21.06.2012, 09:51
kalabuni,
1. var не нужен, переменная локальна, поскольку является аргументом обёртки.

2. С onclick ага, не глядя копирнул ваш код, чтобы не писать начало, впредь буду смотреть внимательнее.

Почему call лишний? Передать нужно не только событие, но и контекст. Вы предлагаете передавать его аргументом?
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
21.06.2012, 10:05
Цитата Сообщение от GuardCat Посмотреть сообщение
var не нужен, переменная локальна, поскольку является аргументом обёртки
Да, согласен.
Просто я обычно пишу параметром функции локальную переменную ev, а первой строкой:
var e = ev || window.event, o = e.srcElement || e.target;
и определяю таким образом аж ТРИ локальные переменные.
Можно, конечно, и совместить параметр функции с первой переменной,.. но так уж я привык.

Что до call - проверьте. Он не просто не нужен - с ним не работает.
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
21.06.2012, 10:21
Цитата Сообщение от kalabuni Посмотреть сообщение
Что до call - проверьте. Он не просто не нужен - с ним не работает.
1. call работает. Вы учли, что первым аргументом обработчику передаётся событие?

2. Расскажите, как нужно передавать контекст с вашей точки зрения?
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
21.06.2012, 10:42
GuardCat, какой-такой контекст?
Я таких умных слов не знаю

Вот я здесь для товарища из другой темы - Странное поведение рисунков - проверял функцию.
Посмотрите сами:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<div id="dd" style="text-align: center;">
<img src="http://radomyr.com.ua/images/stories/image/sert_3.jpg" alt="" />
<img src="http://radomyr.com.ua/images/stories/image/sert_2.jpg" alt="" />
<img src="http://radomyr.com.ua/images/stories/image/sert_1.jpg" alt="" />
</div>
 
<script type = "text/javascript">
function changeSrc (elem, x)
{
var q = elem.src;
if (q.indexOf ('/big_') > 0) elem.src = q.split ('big_').join ('');
else
   {
   var t = q.split ('/'); t [t.length - 1] = 'big_' + t [t.length - 1];
   elem.src = t.join ('/');
   }
alert (x)
}
var par = 'hi!';
for (var j = 0, im = document.getElementById ('dd').getElementsByTagName ('IMG'), lj = im.length; j < lj; j++)
im [j].onclick = function (e) {
   e = e || window.event;                                  // кроссбраузерно получаем событие
   if (e.srcElement && !e.target) e.target = e.srcElement; // кроссбраузерно устанавливаем элемент, на котором произошло событие
   changeSrc (this, par);                                  // работает
// changeSrc.call (this, par);                             // НЕ РАБОТАЕТ!!!
}
</script>
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
21.06.2012, 12:14
kalabuni, контекст, это то, чему равен this. В вашем примере функция принимает элемент, как аргумент. При правильной передаче, она могла бы использовать this вместо аргумента.
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
21.06.2012, 12:28
GuardCat, покажите правильную передачу.
Очень вас попрошу!
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
21.06.2012, 19:48
kalabuni, мне было бы удобнее сделать так:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 function changeSrc (x) {
  var q = this.src;
  if (q.indexOf ('/big_') > 0) this.src = q.split ('big_').join ('');
  else {
   var t = q.split('/');
   t[t.length - 1] = 'big_' + t[t.length - 1];
   this.src = t.join('/');
  }
  alert(x)
}
var par = 'hi!';
for (var j = 0, im = document.getElementById ('dd').getElementsByTagName ('IMG'), lj = im.length; j < lj; j++)
im[j].onclick = function (e) {
  changeSrc.call(this, par);      //РАБОТАЕТ.
}
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
22.06.2012, 04:14
GuardCat, да, так работает. Только объект "событие" (event) передавать незачем:
JavaScript
1
elem.onclick = function () {func.call (this, par)}
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
22.06.2012, 06:22
kalabuni, ну да — данной конкретной функции событие не нужно. Иногда оно необходимо обработчику.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.06.2012, 06:22
Помогаю со студенческими работами здесь

Как в функцию обработки сообщений передать параметры?
Как в функцию обработки сообщений типа void CMathematicsView::OnResultButton() передать параметры? Как и где написать прототип и...

Импорт функции из dll: как корректно передать параметры в функцию?
Есть dll. Там функция, в c++ builder импортирую её: extern &quot;C&quot; __declspec(dllimport) int __stdcall StartSequence(char *lId, int ixId,...

Как передать функцию из другого класса в функцию glutSpecialFunc() которая находится в main?
В программе которая двигает нарисованную мною фигуру в OpenGl, есть функция регистрации нажатия клавиш: void specialKeys(int key, int xx,...

Как в функцию передать функцию, которая будет слотом?
Как в функцию передать функцию, которая будет слотом? То, что написано в интернете и тут (например:...

Передать функцию в функцию и другие параметры. Расшифровать конструкцию
Здравствуйте. Примером может служить jq, в которой мы прописываем функции (чаще всего анонимные), которые выполняются при каких либо jq...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru