【发布时间】:2017-09-26 04:48:34
【问题描述】:
我有一个只接受数字的简单反应输入组件,每个键盘输入我检查输入并仅返回经过验证的条目,在第三个字符之后我将- 字符添加到输入中。一切正常,但是当我从第一个第三个字符编辑/删除一个字符时,我的插入符号会跳到最后一个位置,这很烦人,我怎样才能将插入符号保持在同一位置。
我的输入组件
class App extends Component {
constructor(props){
super(props)
this.state = {
value: ''
}
}
render() {
const {value} = this.state
return (
<div className="App">
<input type="text" value={value} onChange={this._onChange}/>
</div>
)
}
_onChange = (e) => {
this.setState({value: this._validate(e.target.value)})
}
_validate(string){
return new Input(string)
.filterNumbersOnly()
.addSeparator()
.getString()
}
}
export default App;
这是我的字符串验证类
export default class Input{
constructor(string){
this.string = string
}
filterNumbersOnly(){
const regex = /(\d)/g
,strArray = this.string.match(regex)
this.string = strArray ? strArray.reduce((a,b) => { return `${a}${b}` }, '') : ''
return this
}
addSeparator(){
const charArray = this.string.split('')
this.string = charArray.reduce((a,b,index) => {
if(index > 2 && index < 4) {
return `${a}-${b}`
}
return `${a}${b}`
}, '')
return this
}
getString(){
return this.string
}
}
【问题讨论】:
标签: javascript reactjs input caret