-
Notifications
You must be signed in to change notification settings - Fork 7.8k
Documentation for handling multiple options with <select> #531
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
cb76594
16f3254
91f6b7f
ed03a35
cf3fcd6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -182,6 +182,33 @@ class FlavorForm extends React.Component { | |
|
||
Overall, this makes it so that `<input type="text">`, `<textarea>`, and `<select>` all work very similarly - they all accept a `value` attribute that you can use to implement a controlled component. | ||
|
||
|
||
### Handling multiple options with `<select>` | ||
|
||
It is also possible to select multiple options within a `<select>` tag, by enabling the `multiple` attribute and passing an array into the `value` attribute. This array should contain the corresponding `value` attributes of the `<option>` tags inside the `<select>` tag. | ||
|
||
The `handleChange` method from the above example would then change to get the selected values from `event.target.selectedOptions`. | ||
|
||
```javascript{2} | ||
handleChange(event) { | ||
const selectedFlavors = Array.from(event.target.selectedOptions).map(option => option.value); | ||
this.setState({value: selectedFlavors}); | ||
} | ||
``` | ||
|
||
The `<select>` inside the render would also change to pass an array to the `value` attribute: | ||
|
||
```html | ||
<select value={this.state.value} onChange={this.handleChange} multiple={true}> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 2 spaces indentation. |
||
<option value="grapefruit">Grapefruit</option> | ||
<option value="lime">Lime</option> | ||
<option value="coconut">Coconut</option> | ||
<option value="mango">Mango</option> | ||
</select> | ||
``` | ||
|
||
[Try it on CodePen.](https://codepen.io/nupgrover/pen/RxeqLQ?editors=0010) | ||
|
||
> Note | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This note below now looks confusing because we've just discussed it. Maybe move it above, and then expand on how to change it dynamically? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. True, I'll make the change |
||
> | ||
> You can pass an array into the `value` attribute, allowing you to select multiple options in a `select` tag: | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The indentation is inconsistent for the rest of this page, which is 2 spaces for both HTML and JS. Do fix your markup accordingly (not sure if Prettier does that for you).
Also, you can simplify
handleChange
to:There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@yangshun Done. I was not sure if using arrow functions was OK for the docs or not, that is why decided to write it using
function