单选按钮不会触发onChange
事件。
但是,普通输入框可以触发onChange
事件。
有什么问题?
handleFormChange(e) {
debugger
this.setState({[e.target.name]: e.target.value}, this.showState.bind(this, this.props));
}
<div className="col-md-6 col-sm-6">
<div className="form-group">
<label>Name</label>
<input type="text" className="form-control"
name="name" value={this.state.name} onChange={this.handleFormChange.bind(this)} />
</div>
</div>
<div className="form-group">
<label>Seat type : </label>
<div className="btn-group" data-toggle="buttons">
<label className="btn active">
<input type="radio"
name="seat_type"
checked={this.state.seat_type==='indoor'}
onChange={ e => this.handleFormChange.bind(this)}
value={this.state.seat_type}
/><i
className="fa fa-circle-o fa-2x"/><i
className="fa fa-check-circle-o fa-2x"/><span> Indoor</span>
</label>
<label className="btn">
<input type="radio"
name="seat_type"
checked={this.state.seat_type==='outdoor'}
onChange={ e => this.handleFormChange.bind(this)}
value={this.state.seat_type}
/><i
className="fa fa-circle-o fa-2x"/><i
className="fa fa-check-circle-o fa-2x"/><span> Outdoor</span>
</label>
</div>
</div>
我可以切换收音机选项。但是无法触发handleFormChange回调。
<div className="btn-group" data-toggle="buttons">
<label className="btn active">
<input type="radio"
name="seat_type"
defaultChecked={this.state.seat_type==='indoor'}
onChange={ e => this.handleFormChange.bind(this)}
value='indoor'
/><i
className="fa fa-circle-o fa-2x"/><i
className="fa fa-check-circle-o fa-2x"/><span>321 Indoor</span>
</label>
<label className="btn">
<input type="radio"
name="seat_type"
defaultChecked={this.state.seat_type==='outdoor'}
onChange={ e => { this.handleFormChange.bind(this) } }
value='outdoor'
/><i
className="fa fa-circle-o fa-2x"/><i
className="fa fa-check-circle-o fa-2x"/><span> 123Outdoor</span>
</label>
</div>
看来这个<div className="btn-group" data-toggle="buttons">
会影响onClick事件。也许有些脚本正在听这个div。
谢谢你们
答案 0 :(得分:1)
因为两个单选按钮包含相同的值
value={this.state.seat_type}
请为每个具有相同名称的无线电输入分配不同的值。
将输入广播更改为
.....
<input type="radio"
name="seat_type"
checked={this.state.seat_type==='indoor'}
onChange={ e => this.handleFormChange.bind(this)}
value='indoor'
/>
.....
<input type="radio"
name="seat_type"
checked={this.state.seat_type==='outdoor'}
onChange={ e => this.handleFormChange.bind(this)}
value='outdoor'
/>
.....
答案 1 :(得分:1)
将checked={this.state.seat_type==='indoor'}
更改为defaultChecked={this.state.seat_type==='indoor'}
,将checked={this.state.seat_type==='outdoor'}
更改为defaultChecked={this.state.seat_type==='outdoor'}
答案 2 :(得分:1)
如果您正在使用箭头功能,我不必将该功能绑定到此
onChange={ e => this.handleFormChange(e) }
答案 3 :(得分:1)
忘记onChange,在Label标签上点击并尝试:
<div className="form-group">
<label>Seat type : </label>
<div className="btn-group" data-toggle="buttons">
<label className="btn active" onclick={()=>this.handleFormChange('indoor')}>
<input type="radio"
name="seat_type"
checked={this.state.seat_type==='indoor'}
onChange={ e => e => console.log('indoor'}
value={this.state.seat_type}
/><i
className="fa fa-circle-o fa-2x"/><i
className="fa fa-check-circle-o fa-2x"/><span> Indoor</span>
</label>
<label className="btn" onclick={()=>this.handleFormChange('outdoor')}>
<input type="radio"
name="seat_type"
checked={this.state.seat_type==='outdoor'}
onChange={ e => console.log('outdoor')}
value={this.state.seat_type}
/><i
className="fa fa-circle-o fa-2x"/><i
className="fa fa-check-circle-o fa-2x"/><span> Outdoor</span>
</label>
</div>
</div>
答案 4 :(得分:0)
通过将 onClick 事件添加到标签来工作。当我们使用 data-toggle =“ buttons” 时,这是一个问题,因此不会触发onChange事件。
constructor(props) {
super(props);
this.state = {
seat_type: '',
}
}
handleFormChange = (event) => {
const val = event.currentTarget.querySelector("input").value;
this.setState({ currValue: val });
}
render() {
return (
<div className="form-group">
<label>Seat type : </label>
<div className="btn-group" data-toggle="buttons">
<label className="btn active" onclick={this.handleFormChange}>
<input type="radio"
name="seat_type"
checked={this.state.seat_type === 'indoor'}
value="indoor"
/>
<i className="fa fa-circle-o fa-2x" /><i className="fa fa-check-circle-o fa-2x" /><span> Indoor</span>
</label>
<label className="btn" onclick={this.handleFormChange}>
<input type="radio"
name="seat_type"
checked={this.state.seat_type === 'outdoor'}
value="outdoor"
/><i className="fa fa-circle-o fa-2x" /><i className="fa fa-check-circle-o fa-2x" /><span> Outdoor</span>
</label>
</div>
</div>
);
}