Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
4 / 4 / 2
Регистрация: 27.12.2014
Сообщений: 248

Как выделить такую функцию для последующей привязки

23.05.2024, 19:47. Показов 608. Ответов 7

Студворк — интернет-сервис помощи студентам
JavaScript
1
2
3
4
5
6
7
8
9
10
11
function makeFancy(el){
    el.getAll("[data-src]").forEach((item,index,items)=>{
        item.addEventListener("click",(e)=>{
 
            window.items=items
 
            //далее в коде items еще используется
 
        })
    })
}
Как выделить эту функцию click в отдельную? Как потом передавть параметр items?
Это нужно чтобы можно было потом отвязать ее по названию

JavaScript
1
2
item.addEventListener("click",funcName)
item.removeEventListener("click",funcName)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.05.2024, 19:47
Ответы с готовыми решениями:

Как реализовать такую функцию для TextBox?
Очень хочу реализовать такую фичу в моем проекте, а именно, чтобы после нажатия на TextBox, серая надпись "Логин" в нем...

Как задать такую функцию?
x^2+(y^2)\cdot(z^3) = z^4 Как вот такую функцию задать в matlab?

Как минимизировать такую функцию?
Функция def Phi(u, X): return -(1+u*X+u*X+u*X+u*X) Известно, что : 1) X...X находятся в промежутке 2) u,u,u,u...

7
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3839 / 1688 / 431
Регистрация: 14.03.2022
Сообщений: 4,294
27.05.2024, 11:04
Цитата Сообщение от axmed2004 Посмотреть сообщение
Как выделить эту функцию click в отдельную?
Например так...

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function makeFancy(el){
    el.getAll("[data-src]").forEach((item,index,items)=>{
        const funcName = test(items)
        item.addEventListener("click", funcName)
    })
}
 
//
function test(items) {
   return e => {
       window.items=items
       //и так далее
   }
}
0
4 / 4 / 2
Регистрация: 27.12.2014
Сообщений: 248
27.05.2024, 13:19  [ТС]
krvsa, уточнение:

JavaScript
1
2
3
4
5
6
item.addEventListener("click",(e)=>{
    e.preventDefault()
    e.stopPropagation()
 
    //....
}
как передать е в функцию test()?
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3839 / 1688 / 431
Регистрация: 14.03.2022
Сообщений: 4,294
27.05.2024, 14:22
Цитата Сообщение от axmed2004 Посмотреть сообщение
как передать е в функцию test()?
Ты так и не понял что я в итоге тебе предложил...

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function makeFancy(el){
    el.getAll("[data-src]").forEach((item,index,items)=>{
        const funcName = test(items)
        item.addEventListener("click", funcName)
    })
}
 
//
function test(items) {
   return e => {
       e.preventDefault()
       e.stopPropagation()
       window.items=items
       //и так далее
   }
}
0
4 / 4 / 2
Регистрация: 27.12.2014
Сообщений: 248
27.05.2024, 15:06  [ТС]
krvsa, был невнимателен. А как отвязать функцию?

JavaScript
1
2
3
4
5
6
7
8
9
function makeFancy(el){
el.getAll("[data-src]").forEach((item,index,items)=>{
    const func=f(item,index,items)
    item.removeEventListener("click",func)
    item.addEventListener("click",func)
}
 
get(".p_images").fancy()
get(".p_images").fancy()
не отвязывает. срабатывает 2 раза
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3839 / 1688 / 431
Регистрация: 14.03.2022
Сообщений: 4,294
27.05.2024, 15:16
Цитата Сообщение от axmed2004 Посмотреть сообщение
не отвязывает
Нужно "отвязывать" то, что привязал.

Но, судя по приведенным тобой кускам, похоже ты не верно пытаешься решать свою проблему.
Сначала вешаешь кучу одинаковых обработчиков... Потом (зачем-то) их удаляешь...

Например можно применить "делегирование", т.е. повесить один обработчик на родителя, нужных тебе элементов. Если он потом будет не нужен - его одного удалить.
0
4 / 4 / 2
Регистрация: 27.12.2014
Сообщений: 248
27.05.2024, 15:23  [ТС]
krvsa, написал свой fancybox. Есть блок с картинками, при вызове блок.fancy() на каждую картинку внутри вешается клик. В блоках с картинками могут быть изменения, добавление/удаление картинок. Для новых картинок вызываю опять .fancy(), и старые получают еще один обработчик. Поэтому нужно сначала удалить, а потом повесить заново
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3839 / 1688 / 431
Регистрация: 14.03.2022
Сообщений: 4,294
28.05.2024, 10:18
Лучший ответ Сообщение было отмечено axmed2004 как решение

Решение

axmed2004, считаю твой подход не верным...
Делай один обработчик на родителя. Пусть он определяет на чем кликнули и делает нужные действия.
Т.о. ничего даже удалять не нужно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.05.2024, 10:18
Помогаю со студенческими работами здесь

Как минимизировать такую функцию?
Есть список значений Y и список X и я хочу минимизировать функцию такого вида(прикрепил картинку). Также есть начальные значения...

Как описать такую функцию?
Ето опять я Пожалуйсто подскажите как описать функцию так чтобы она принимала не 1 комбинацию параметров а много, так как на рисунке? ...

как написать такую функцию
Помогите пожалуйста написать функцию, формирующую таблицу символов и их кодов из заданного диапазона.

Как организовать такую функцию
имеется два параметра h и w, каждой паре значений h и w соответствует c. как получить с зная h и w. Пример: Дано h: 10,...

Как записать такую функцию
Помогите (2n)!!, где (2n)!!=2*4*...*(2n)


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
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 Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru