This JavaScript code snippet helps you to create a single select dropdown. It handles select items through HTML5 data-attribute. So, you can add as many options as you want in a single select dropdown.
How to Create JavaScript Single Select Dropdown
1. First of all, create the HTML structure as follows:
<div class="selects-box"> <div class="select" data-select> <div class="select__selected-item" data-select-action data-select-open> <div class="select__selected-title" data-select-title> Choose item </div> <svg class="select__arrow" data-select-arrow width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M17 12L9 20L7 18L15 10" fill="#1E4DBA"/> <path d="M17 12L15 14L7 6L9 4" fill="#1E4DBA"/> </svg> </div> <div class="select__list" data-select-list> <div class="select__list-item" data-select-action data-select-item>CodeHim</div> <div class="select__list-item" data-select-action data-select-item>Free HTML code</div> <div class="select__list-item" data-select-action data-select-item>Web Designing</div> <div class="select__list-item" data-select-action data-select-item>Plugins</div> <div class="select__list-item" data-select-action data-select-item>Code Snippets</div> <div class="select__list-item" data-select-action data-select-item>Sixth item</div> <div class="select__list-item" data-select-action data-select-item>Eight item</div> <div class="select__list-item" data-select-action data-select-item>Ninth item</div> <div class="select__list-item" data-select-action data-select-item>Tenth item</div> </div> <input class="select__input" type="text" data-select-input> </div> </div>
2. After that, add the following CSS styles into your project:
.selects-box { display: flex; flex-wrap: wrap; } .select { max-width: 280px; position: relative; width: 100%; margin: 20px; } .select__selected-item { background: #f4f4f4; padding: 10px 20px; border-radius: 4px; border: 2px solid #d8d8d8; color: #1e4dba; box-sizing: border-box; display: flex; align-items: center; justify-content: space-between; } .select__selected-item:hover { cursor: pointer; background: #f9f9f9; } .select__arrow { transition: 0.3s; } .select__arrow_rotate { transform: rotate(90deg); } .select__list { border: 2px solid transparent; border-radius: 4px; position: absolute; width: 100%; top: 50px; z-index: 1; box-sizing: border-box; transition: 0.3s; overflow: auto; max-height: 0; opacity: 0; } .select__list_opened { max-height: 200px; border-color: #d8d8d8; opacity: 1; } .select__list-item { padding: 10px 20px; color: #6f6f6f; border-bottom: 1px solid #d8d8d8; background: #fff; } .select__list-item:hover { text-decoration: underline; cursor: pointer; background: #f9f9f9; } .select__list-item:first-child { border-radius: 2px 2px 0 0; } .select__list-item:last-child { border-bottom: none; border-radius: 0 0 2px 2px; } .select__input { display: none; }
3. Finally, add the following JavaScript code and done.
const SELECT = '[data-select]' const SELECT_LIST = '[data-select-list]' const SELECT_ARROW = '[data-select-arrow]' const SELECT_ACTION = '[data-select-action]' const SELECT_TITLE = '[data-select-title]' const SELECT_INPUT = '[data-select-input]' const SELECT_ITEM = 'selectItem' const OPEN_SELECT = 'selectOpen' class Select { static attach() { const select = new Select() select.init() } init() { if (this.findSelect()) { this.applyListener() } } applyListener() { document.querySelector('*').addEventListener('click', e => { const element = e.target.closest(SELECT_ACTION) if (this.isCallSelectElement(element)) { if (this.isOpened()) { this.closeSelectList() } else { this.openSelectList() } } if (this.isCallSelectItemElement(element)) { this.addSelectedValue(element) } if (this.isCallSelectElement(element) !== true && this.selectOverlayIsClickedElement(element) !== true) { this.closeSelectList() } }) } isCallSelectElement(element) { return element && OPEN_SELECT in element.dataset } isCallSelectItemElement(element) { return element && SELECT_ITEM in element.dataset } findSelect() { const select = document.querySelector(SELECT) if (select) { this.select = select this.selectList = this.select.querySelector(SELECT_LIST) this.selectArrow = this.select.querySelector(SELECT_ARROW) this.selectTitle = this.select.querySelector(SELECT_TITLE) this.selectInput = this.select.querySelector(SELECT_INPUT) return true } return false } isOpened() { return this.selectList.classList.contains('select__list_opened') } openSelectList() { this.selectList.classList.add('select__list_opened') this.selectArrow.classList.add('select__arrow_rotate') } closeSelectList() { this.selectList.classList.remove('select__list_opened') this.selectArrow.classList.remove('select__arrow_rotate') } addSelectedValue(element) { this.selectTitle.innerHTML = element.innerHTML this.selectInput.value = element.innerHTML } selectOverlayIsClickedElement(element) { return element && 'select' in element.dataset } } Select.attach()
That’s all! hopefully, you have successfully integrated this select dropdown code snippet into your project. If you have any questions or facing any issues, feel free to comment below.
Similar Code Snippets:
I code and create web elements for amazing people around the world. I like work with new people. New people new Experiences.
I truly enjoy what I’m doing, which makes me more passionate about web development and coding. I am always ready to do challenging tasks whether it is about creating a custom CMS from scratch or customizing an existing system.