【发布时间】:2019-09-30 05:12:22
【问题描述】:
我在此代码中查找问题时遇到了很多麻烦...我正在尝试构建一个水平菜单,单击时会展开,然后用户可以单击他们想要的选项。要关闭展开的菜单,他们可以单击左侧的“X”。 Here's an image of what I want it to look like
我问过以前的question 并做了一些更改,但不知道从这里开始做什么。
我的主要问题:
如何从
buildLanguageSelector添加动态创建的列表元素?-
如何向
menu和x添加点击处理程序,以便它们在点击时切换?现在,传递给点击处理程序的this是nullconst LanguageSelector = (props) => { const { languages, onSelectLanguage } = props const listContainer = document.createElement('ul') listContainer.style.position = 'absolute' listContainer.style.top = '0' const buildLanguageSelector = () => { if (props.ui.languages.length) { [...props.ui.languages].forEach(function (language, i) { const el = document.createElement('li') el.value = language.languageCode el.innerHTML = language.name el.className = "item" el.addEventListener("click", function(e) { e.stopPropagation() }) listContainer.appendChild(el) }) } else { } } buildLanguageSelector() const openMenu = (e) => { console.log(e) e.parentElement.classList.add('open') } const closeMenu = (e) => { e.parentElement.classList.remove('open') } return ( <div className='menu'> // `this` being passed into `openMenu` and `closeMenu` is null <div className='open-button' onClick= {openMenu(this)}>Menu</div> <div className='close-button' onClick= {closeMenu(this)}>✕</div> // I know that this part is incorrect-- however I'm not sure how // to insert the dynamically created li's from buildLanguageSelector <div>{listContainer}</div> </div> ) }body { background: white; } .menu { background: white; border-radius: 17px; height: 34px; width: 100px; display: flex; flex-direction: row; justify-content: center; align-items: center; cursor: pointer; } .menu .item { display: none; color: grey; } .menu #open-button { display: block; } .menu #close-button { display: none; color: grey; } .menu.open { justify-content: space-around; width: 300px; } .menu.open .item { display: block; } .menu.open .item:hover { color: black; } .menu.open .close-button { display: block; } .menu.open .close-button:hover { color: black; } .menu.open .open-button { display: none; }
【问题讨论】:
标签: javascript html css reactjs