javascript - 引导多选:默认值和 onChange 不起作用
问题描述
我已经进行了大量搜索,但无法使其正常工作。看起来很简单。顺便说一句,我正在使用 Bootstrap-multiselect。
class MyProject extends React.Component {
constructor(props) {
super(props);
this.state = { searchForm: { status: ["VALUE2","VALUE4"], otherprops: "blah" }, otherStates: "blah"};
}
//blah blah
render() {
return (
<select id="example-multiple-selected" multiple="multiple" defaultValue={this.state.searchForm.status} onChange={(event) => this.state.searchForm.status = event.target.value}>
<option value="VALUE1">VALUE1</option>
<option value="VALUE2">VALUE2</option>
<option value="VALUE3">VALUE3</option>
<option value="VALUE4">VALUE4</option>
<option value="VALUE5">VALUE5</option>
<option value="VALUE6">VALUE6</option>
<option value="VALUE7">VALUE7</option>
<option value="VALUE8">VALUE8</option>
</select>
)
}}
问题
未选择默认值(VALUE2 和 VALUE4);
更改所选选项时似乎没有任何反应
编辑
似乎每个人都在谈论我没有正确设置状态的事实,我绝对同意。这是我犯的一个愚蠢的错误。但是,我面临的根本问题仍然存在:
正如我所提到的,默认值不会被填充;
onStatusChanged 函数根本没有被触发。我将调试点放在此函数中,但是当我更改所选选项时根本没有达到调试点。
onStatusChanged = (e) => { 让搜索 = this.state.searchForm; search.status = e.target.selectedOptions; this.setState({ searchForm: search }) }
<select id="example-multiple-selected" multiple="multiple" defaultValue={this.state.searchForm.status} onChange={this.onStatusChanged}>
编辑 2
最新代码:
class MyProject extends React.Component {
constructor(props) {
super(props);
this.state = { searchForm: { status: ["VALUE2","VALUE4"], otherprops: "blah" }, otherStates: "blah"};
this.onStatusChanged = this.onStatusChanged.bind(this);
}
//blah blah
onStatusChanged = (e) => {
let search = this.state.searchForm;
search.status = e.target.selectedOptions;
this.setState({
searchForm: search
})
}
render() {
return (
<select id="example-multiple-selected" multiple="multiple" value={this.state.searchForm.status} onChange={this.onStatusChanged}>
<option value="VALUE1">VALUE1</option>
<option value="VALUE2">VALUE2</option>
<option value="VALUE3">VALUE3</option>
<option value="VALUE4">VALUE4</option>
<option value="VALUE5">VALUE5</option>
<option value="VALUE6">VALUE6</option>
<option value="VALUE7">VALUE7</option>
<option value="VALUE8">VALUE8</option>
</select>
)
}}
重申我面临的问题:
正如我所提到的,默认值不会被填充;
onStatusChanged 函数根本没有被触发。我将调试点放在此函数中,但是当我更改所选选项时根本没有达到调试点。似乎未检测到 onChange。
顺便说一句,如果有帮助,我正在使用Bootstrap-multiselect插件。
解决方案
您不能只显式设置状态(期望在构造函数中)。在事件处理程序中(更改时),您必须使用 this.setState(...)。此外,您应该使用“selectedOptions”属性。
onStatusChanged(event) {
let searchForm = this.state.searchForm;
searchForm.status = event.target.selectedOptions;
this.setState({
searchForm:searchForm
});
}
....
<select id="example-multiple-selected" multiple="multiple" value={this.state.searchForm.status} onChange={this.onStatusChanged.bind(this)}>
如果你要传入一个函数,那么你需要绑定“this”以便它可以设置状态(如果你需要在函数中访问'this',你只需要执行bind(this))。
这是它在 JS Fiddle 上的工作https://jsfiddle.net/69z2wepo/184044/
推荐阅读
- r - R中基本数据类型的最小/最大值是多少?
- python-3.x - Deep Q learning-Training问题
- swift - 使用 Animoji/Memoji 作为头像
- python - python - 如何将从txt文件读取的代理对转换回python 3中的表情符号?
- android - 从字符串列表填充 Android 中的 Spinner
- kotlin - 如何从活动中打开片段?
- python - 没有\n,有没有方便的方法来读取行?
- javascript - Reactjs历史推送在抽屉组件中不起作用
- c# - 使用 ASP.NET 核心添加新的持久性 cookie
- jquery - 带有 Twitter API 的 jquery $.post 有效,但回调函数不返回数据