'radio input still true after unchecked
I have filter section with checkbox and radio when user unchecked for checkbox the content is hidding, but for radio I can't hidden the content he still true.
Any help please
const inputChecked = (e) => {
const updatedList = [...checked];
if (e.target.checked) {
updatedList = [...checked, e.target.value];
}
else {
updatedList.splice(checked.indexOf(e.target.value),1)
}
setChecked(updatedList);
};
return (
<form>
<div onChange={inputChecked}>
<div className='flex items-center'>
<input type='radio' id="most_recent" name="sort_by" value='Most recent' />
<label htmlFor='most_recent'>Most recent</label>
</div>
<div className='flex items-center'>
<input type='radio' id="most_relevent" name="sort_by" value='Most relevent' />
<label htmlFor='most_relevent'>Most relevent</label>
</div>
</div>
<div onChange={inputChecked}>
<div className='flex items-center'>
<input type='checkbox' id="intership" name="intership" value='intership' />
<label htmlFor='intership'>intership</label>
</div>
<div className='flex items-center'>
<input type='checkbox' id="Director" name="director" value='Director' />
<label htmlFor='Director'>Director</label>
</div>
<div className='flex items-center'>
<input type='checkbox' id="Associate" name="associate" value='Associate' />
<label htmlFor='Associate'>Associate</label>
</div>
</div>
</form>
)
Solution 1:[1]
Separate into two types of handle: handle for radio checked and handle for checkbox checked.
Have to put onChange into each radio input <input type="radio" onChange={}... />. Try this below code:
const [prevRadio, setPrevRadio] = useState("")
const radioChecked = (e) => {
setPrevRadio(e.target.value)
let updatedList = [...checked, e.target.value];
updatedList.splice((prevRadio ? checked.indexOf(prevRadio) : (checked.length + 99)),1)
setChecked(updatedList)
}
const inputChecked = (e) => {
let updatedList = [...checked];
if (e.target.checked) {
updatedList = [...checked, e.target.value];
}
else {
updatedList.splice(checked.indexOf(e.target.value),1)
}
setChecked(updatedList);
};
return (
<form>
<div>
<div className='flex items-center'>
<input type='radio' id="most_recent" name="sort_by" value='Most recent'
onChange={inputChecked}/> //<== Put onChange in here
<label htmlFor='most_recent'>Most recent</label>
</div>
<div className='flex items-center'>
<input type='radio' id="most_relevent" name="sort_by" value='Most relevent'
onChange={inputChecked}/> //<== Put onChange in here
<label htmlFor='most_relevent'>Most relevent</label>
</div>
</div>
<div onChange={inputChecked}>
<div className='flex items-center'>
<input type='checkbox' id="intership" name="intership" value='intership' />
<label htmlFor='intership'>intership</label>
</div>
<div className='flex items-center'>
<input type='checkbox' id="Director" name="director" value='Director' />
<label htmlFor='Director'>Director</label>
</div>
<div className='flex items-center'>
<input type='checkbox' id="Associate" name="associate" value='Associate' />
<label htmlFor='Associate'>Associate</label>
</div>
</div>
</form>
)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | VMT |
