#javascript #html #css #reactjs
Вопрос:
У меня есть это требование в react, здесь .строки прокручиваются (имеют некоторую фиксированную высоту). Каждая строка .содержит поле ввода и компонент списка для отображения в качестве автоматического предложения (datalist). В фокусе мне нужно показать предложения, ниже ввода и при выборе опции мне нужно сбросить предложения, чтобы они отображали соответствующие предложения.
Проблема здесь в том, что список скрывается внутри прокручиваемого компонента. Пожалуйста, помогите мне показать этот список предложений, даже если я прокручиваю его. Я пробовал использовать datalist, но в react прослушиватели событий не запускаются при нажатии на элементы datalist.
const App = () => {
const [show, setShow] = React.useState(false);
const showSuggestions = () => {
setShow(!show);
}
return(
<div className='outerMost'>
<div>Some component</div>
<div>One more component</div>
<div className='rows'>
<div className='row'>
<input value='' />
<div className='suggestions'>
</div>
</div>
<div className='row'>
<input value='' />
<div className='suggestions'>
</div>
</div>
<div className='row'>
<input value='' />
<div className='suggestions'>
</div>
</div>
<div className='row'>
<input value='' onClick={showSuggestions} />
{show amp;amp;<div className='suggestions'>
<ul>
<li>option 1</li>
<li>option 2</li>
<li>option 3</li>
<li>option 4</li>
<li>option 5</li>
<li>option 6</li>
<li>option 7</li>
<li>option 8</li>
<li>option 9</li>
<li>option 10</li>
</ul>
</div>
}
</div>
</div>
<div><button>click me</button></div>
</div>
)
}
ReactDOM.render(
<App />,
document.getElementById('root')
);
.outerMost {
margin: auto;
width: 200px;
}
.rows {
height: 150px;
overflow-y: scroll;
}
.row {
position: relative;
}
.suggestions {
position: absolute;
background: beige;
left: 0;
width: 166px;
z-index: 1;
}
<script src="https://unpkg.com/react@16.7.0-alpha.0/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16.7.0-alpha.0/umd/react-dom.development.js"></script>
<div id='root'></div>
Ответ №1:
Несмотря на то, что ваши предложения расположены абсолютно, они отображаются внутри строки, потому что позиция строки установлена на relative
. Если вы удалите это из строки, ваши предложения будут расположены за пределами строки.
Комментарии:
1. Спасибо вам, Дэвид Клинг, за быстрый ответ. Это работает.
2. когда строки не прокручиваются. Как только строки станут прокручиваемыми, абсолютная позиция будет отображаться в скрытой области переполнения не относительно входного элемента