Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.10.2021, 05:22
Профессор
Отправить личное сообщение для Ubivectel Посмотреть профиль Найти все сообщения от Ubivectel
 
Регистрация: 01.12.2020
Сообщений: 171

Оптимизировать код
Привет мир!

Имеется конструкция скрывающая модальные окна и их оверлей. Вот такая:

let scolor = document.querySelector('#scolor');
    scolor.onclick = function () {
        document.querySelectorAll('#KIDE_opciones, .overlayo').forEach(elem => elem.style.display = "none");
      
    };

    let most = document.querySelector('.overlayo');
    most.onclick = function () {
        document.querySelectorAll('.KIDE_mostrar, .overlayo').forEach(elem => elem.style.display = "none");
    };

    let kidemens = document.querySelector('#kide_x_s');
    kidemens.onclick = function () {
        document.querySelector(".overlayo").style.display = "none";
    };

    let kborrar = document.querySelector('#KIDE_mensaje_borrar');
    kborrar.onclick = function () {
        document.querySelector(".overlayo").style.display = "none";
    };


Все работает, но перфекционизм негодует, 4 переменные для одной и той же функции наверное дико, попытался записать в одну добавив цикл:

let scolor = document.querySelectorall('#scolor, .overlayo, #kide_x_s, #KIDE_mensaje_borrar').forEach(el) =>;
    scolor.onclick = function () {
        document.querySelectorAll('#KIDE_opciones, .overlayo, .KIDE_mostrar, ').forEach(elem => elem.style.display = "none");
    };


Явно блуждаю в синтаксисе, но уже по всякому перепробовал. Можно ли заставить это работать?
Ответить с цитированием
  #2 (permalink)  
Старый 01.10.2021, 07:16
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Ubivectel,
если окна однотипные, должно быть примерно так.
let modal = document.querySelectorAll('.modal');
let btn = document.querySelectorAll('.btn');
btn.forEach((el, i) => el.addEventListener('click', () => modal[i].style.display = "none"));
Ответить с цитированием
  #3 (permalink)  
Старый 01.10.2021, 07:52
Профессор
Отправить личное сообщение для Ubivectel Посмотреть профиль Найти все сообщения от Ubivectel
 
Регистрация: 01.12.2020
Сообщений: 171

Привет рони

Нет, не прокатывает, там в том и заморочка, что кругом разные селекторы '.modal' и '.btn' не присутствуют на нужных элементах. А дописывать им классы чревато тем, что они "подхватят/" лишние стили
Ответить с цитированием
  #4 (permalink)  
Старый 01.10.2021, 08:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Ubivectel,
впишите ваши селекторы в предложенный код или сделайте минимальный макет
Ответить с цитированием
  #5 (permalink)  
Старый 19.10.2021, 14:32
Профессор
Отправить личное сообщение для Ubivectel Посмотреть профиль Найти все сообщения от Ubivectel
 
Регистрация: 01.12.2020
Сообщений: 171

Однако весь моск поломал, но этот код работает:

let scolor = document.querySelector('#scolor');
    scolor.onclick = function() {
        document.querySelectorAll('#KIDE_opciones, .overlayo').forEach(elem => elem.style.display = "none");
        
    };

    let most = document.querySelector('.overlayo');
    most.onclick = function() {
        document.querySelectorAll('.KIDE_mostrar, .overlayo').forEach(elem => elem.style.display = "none");
        
    };

    let kidemens = document.querySelector('#kide_x_s');
    kidemens.onclick = function() {
        document.querySelector(".overlayo").style.display = "none";
    };

    let kborrar = document.querySelector('#KIDE_mensaje_borrar');
    kborrar.onclick = function() {
        document.querySelector(".overlayo").style.display = "none";
    };


А этот нет:

let scolor = document.querySelectorall('#scolor, .overlayo, #kide_x_s, #KIDE_mensaje_borrar').forEach(el) =>;
        scolor.onclick = function () {
            document.querySelectorAll('#KIDE_opciones, .overlayo, .KIDE_mostrar,').forEach(elem => elem.style.display = "none");
        };


Вроде ведь одно и то же, что не так делаю
Ответить с цитированием
  #6 (permalink)  
Старый 19.10.2021, 15:02
Профессор
Отправить личное сообщение для Ubivectel Посмотреть профиль Найти все сообщения от Ubivectel
 
Регистрация: 01.12.2020
Сообщений: 171

И так не работает

let modals = document.querySelectorAll('#scolor, .overlayo, #kide_x_s, #KIDE_mensaje_borrar');
    let btns = document.querySelectorAll('#KIDE_opciones, .overlayo, .KIDE_mostrar,');
    btns.forEach((el, i) => el.addEventListener('click', () => modals[i].style.display = "none"));
Ответить с цитированием
  #7 (permalink)  
Старый 19.10.2021, 15:06
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от Ubivectel
что не так делаю
Дык писали тебе выше...
Сообщение от рони
сделайте минимальный маке
Ответить с цитированием
  #8 (permalink)  
Старый 19.10.2021, 15:09
Профессор
Отправить личное сообщение для Ubivectel Посмотреть профиль Найти все сообщения от Ubivectel
 
Регистрация: 01.12.2020
Сообщений: 171

Да я не дорос до таких слов )
Ответить с цитированием
  #9 (permalink)  
Старый 19.10.2021, 15:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Ubivectel,

[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #10 (permalink)  
Старый 19.10.2021, 16:26
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Так наверно должно быть
document.querySelectorall('#scolor, .overlayo, #kide_x_s, #KIDE_mensaje_borrar')
  .forEach( el =>  {
        el.onclick =  () => el.style.display = "none"
       }
   )
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать код CSS+HTML JamesMorgan Общие вопросы Javascript 2 11.08.2015 12:50
Помогите к js коду, написать html код Modrih Элементы интерфейса 8 16.06.2015 18:08
Как подгрузить код JS динамически? zhurchik Общие вопросы Javascript 22 02.02.2015 14:16
код нe работает в фаирфохе dadli Javascript под браузер 2 28.01.2012 21:18
Помогите код оптимизировать. Suharik Events/DOM/Window 2 27.05.2010 11:59