Я хочу показать список вариантов выбора при наведении курсора, но он не работает:
<div className = "rating-option">
<select
id = "rating"
className = "rating"
value = {rating}
onChange = {(e) => setRating(e.target.value)}
>
<option value = "">Select Rating</option>
<option value = "1">1- Bad</option>
<option value = "2">2- Fair</option>
<option value = "3">3- Good</option>
<option value = "4">4- Very good</option>
<option value = "5">5- Excelent</option>
</select>
</div>
CSS, примененный к этому коду:
.rating-option {
position: relative;
margin: 20px;
padding: 20px;
display: flex;
}
.rating-option:hover .rating {
display: list-item;
background-color: red;
}
#rating {
position: absolute;
}
Вы не можете вызвать отображение списка параметров при наведении курсора, поскольку он контролируется самим браузером.
Но вы можете добиться аналогичного эффекта, используя собственные раскрывающиеся списки и подход на основе React.
import React, { useState } from 'react';
const CustomSelect = () => {
const [isHovered, setIsHovered] = useState(false);
const [selectedValue, setSelectedValue] = useState('');
const options = [
{ value: '', label: 'Select Rating' },
{ value: '1', label: '1- Bad' },
{ value: '2', label: '2- Fair' },
{ value: '3', label: '3- Good' },
{ value: '4', label: '4- Very good' },
{ value: '5', label: '5- Excellent' },
];
const handleMouseEnter = () => setIsHovered(true);
const handleMouseLeave = () => setIsHovered(false);
return (
<div
className = "rating-option"
onMouseEnter = {handleMouseEnter}
onMouseLeave = {handleMouseLeave}
>
<div className = "custom-select">
{selectedValue ? options.find(option => option.value === selectedValue).label : 'Select Rating'}
</div>
{isHovered && (
<ul className = "custom-options">
{options.map(option => (
<li
key = {option.value}
onClick = {() => setSelectedValue(option.value)}
className = {option.value === selectedValue ? 'selected' : ''}
>
{option.label}
</li>
))}
</ul>
)}
</div>
);
};
export default CustomSelect;
.rating-option {
position: relative;
width: 200px;
margin: 20px;
padding: 10px;
border: 1px solid #ccc;
cursor: pointer;
}
.custom-select {
padding: 10px;
background-color: #f9f9f9;
border: 1px solid #ccc;
text-align: center;
}
.custom-options {
position: absolute;
top: 100%;
left: 0;
width: 100%;
border: 1px solid #ccc;
background-color: #fff;
z-index: 1000;
list-style: none;
padding: 0;
margin: 0;
}
.custom-options li {
padding: 10px;
cursor: pointer;
}
.custom-options li:hover, .custom-options li.selected {
background-color: #f0f0f0;
}
да, пожалуйста, покажите, как это работает?
На самом деле это решение работает не во всех браузерах. и это также не рекомендуемый подход, поэтому, пожалуйста, придерживайтесь подхода, о котором я рассказал выше. здесь вы можете прочитать об этом больше. stackoverflow.com/questions/249192/…
Пожалуйста, отметьте мой ответ, если он вам помог
Спасибо, дорогой Абузаин, ваше решение помогло мне решить мою проблему с наведением.
Пожалуйста, отметьте мой ответ
Вы можете использовать ссылку, чтобы сохранить ссылку на select, и вы можете использовать событие onHover, а затем onHover вы можете вручную вызвать событие фокуса для этого элемента выбора. Дайте мне знать, если вы хотите это в коде