добавление атрибута selected к option, для отправления его на сервер
Всем привет, столкнулся с проблемой реализации выпадающего списка.
Функционал анимации с помощью чистого js реализовал, но есть проблема в отправки выбранного элемента на сервер, просто не отправляется, те кто сталкивались с этой проблемой, либо были приближены к ней, буду очень благодарен за помощь. Верстка выпадающего списка html: <div class="select__box--header"> <div class="options__container--header options__container"> <div class="option--header option"> <option value="EN">EN</option> </div> <div class="option--header option"> <option value="ES">ES</option> </div> </div> <div class="selected--header lang selected">RU</div> </div> .select__item--header { margin-right: 40px; &:last-child { margin-right: 0; } } .select__item--header.language { width: 105px; } .select__box--header { display: flex; width: 100%; flex-direction: column; position: relative; } .select__box--header .options__container--header { background-color: #fff; color: #6d2568; border: 1px solid #ccc; max-height: 0; width: inherit; border: 1px solid #999999; opacity: 0; border-radius: 10px; overflow: hidden; transition: all .3s; order: 1; position: absolute; top: 55px; z-index: 100; } .selected--header { background-color: #f2f2f2; border-radius: 22px; font-family: 'Lato', sans-serif; height: 44px; color: #6d2568; order: 0; position: relative; cursor: pointer; transition: all 0.4s; &::after { content: ''; display: block; background: url('../img/icons/arrow/arrowsvg.svg'); background-size: contain; background-repeat: no-repeat; position: absolute; width: 9px; height: 5px; top: 21px; right: 15px; transition: all 0.4s; } &:hover { background-color: #6d2568; color: #fff; } } .selected--header:hover::after { background: url('../img/icons/arrow/arrowsvg-h.svg'); } .selected--header.lang::before { content: ''; display: block; background: url('../img/icons/icons/01.svg'); background-size: contain; background-repeat: no-repeat; width: 16px; height: 16px; position: absolute; left: 18px; top: 15px; transition: background .3s linear; } .selected--header.lang:hover::before { background: url('../img/icons/icons/01-h.svg'); } .select__box--header .options__container--header.active { max-height: 400px; opacity: 1; } .select__box--header .options__container--header.active + .selected--header::after { transform: rotateX(180deg); } .select__box--header .option--header, .selected--header { padding: 16px 36px 16px 50px; } .select__box--header .option--header:hover { background-color: #6e2669; color: #fff; } .select__box--header option { cursor: pointer; } Скрипт реализации анимации: const selectedAll = document.querySelectorAll(".selected"); selectedAll.forEach(selected => { const optionsContainer = selected.previousElementSibling; const optionList = optionsContainer.querySelectorAll('.option'); selected.addEventListener("click", () => { if (optionsContainer.classList.contains("active")) { optionsContainer.classList.remove("active"); } else { let currentActive = document.querySelector(".options__container.active"); if (currentActive) { currentActive.classList.remove("active"); } optionsContainer.classList.add("active"); } }); optionList.forEach(o => { o.addEventListener("click", () => { selected.innerHTML = o.querySelector("option").innerHTML; optionsContainer.classList.remove("active"); }); }); }) Я так подумал что добавление атрибута selected для option поможет, если это так, то написание данного скрипта у меня не вышло, с чем прошу помочь мне пожалуйста |
fl4shK,
может как-то использовать нормальный select? Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. загляните сюда http://javascript.ru/forum/events/78...-dropdaun.html |
option в div, это ни в какие ворота. Замените их на label + radio, последние как именованная группа и будете получать на сервере значение выбранной кнопки.
|
кастомизация селекта
fl4shK,
<!doctype html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> .select__item--header.language { width: 105px; } .select__box--header { display: flex; width: 100%; flex-direction: column; position: relative; } .select__box--header .options__container--header { background-color: #fff; color: #6d2568; border: 1px solid #ccc; max-height: 0; width: inherit; border: 1px solid #999; opacity: 0; border-radius: 10px; overflow: hidden; transition: all .3s; order: 1; position: absolute; top: 55px; z-index: 100; } .selected--header { background-color: #f2f2f2; border-radius: 22px; font-family: 'Lato', sans-serif; height: 44px; color: #6d2568; order: 0; position: relative; cursor: pointer; transition: all .4s; line-height: 44px; } .selected--header::after { content: ''; display: block; background: url('../img/icons/arrow/arrowsvg.svg'); background-size: contain; background-repeat: no-repeat; position: absolute; width: 9px; height: 5px; top: 21px; right: 15px; transition: all .4s; } .selected--header:hover { background-color: #6d2568; color: #fff; } .selected--header:hover::after { background: url('../img/icons/arrow/arrowsvg-h.svg'); } .selected--header.lang::before { content: ''; display: block; background: url('../img/icons/icons/01.svg'); background-size: contain; background-repeat: no-repeat; width: 16px; height: 16px; position: absolute; left: 18px; top: 15px; transition: background .3s linear; } .selected--header.lang:hover::before { background: url('../img/icons/icons/01-h.svg'); } .select__box--header.active .options__container--header { max-height: 400px; opacity: 1; } .select__box--header.active .options__container--header + .selected--header::after { transform: rotateX(180deg); } .select__box--header .option--header, .selected--header { padding: 8px 36px 8px 50px; } .select__box--header .option--header:hover { background-color: #6e2669; color: #fff; } .select__box--header .option { cursor: pointer; } .select__box--header .option input { display: none; } :checked + label{ font-weight: bold; } </style> </head> <body> <div class="select__box--header"> <div class="options__container--header options__container"> <div class="option--header option"> <input name="lang" type="radio" value="EN"><label>EN</label> </div> <div class="option--header option"> <input name="lang" type="radio" value="ES"><label>ES</label> </div> <div class="option--header option"> <input name="lang" type="radio" value="RU" checked="checked"><label>RU</label> </div> </div> <div class="selected--header lang selected">RU</div> </div> <script> const boxAll = document.querySelectorAll(".select__box--header"); boxAll.forEach(box => { box.addEventListener("click", ({target}) => { box.classList.toggle("active"); if(target = target.querySelector("input")) { target.checked = true; box.querySelector(".selected").innerHTML = target.value; } }); }) </script> </body> </html> |
Цитата:
И Рони спасибо за помощь, сразу видно актив на форуме) |
Цитата:
|
Часовой пояс GMT +3, время: 08:19. |