我用React创建了一部电话,无论您按下按键还是使用键盘,数字都存储在input
中。
电话工作正常,但按Delete键或Backspace键始终会消除链中的最后一个值。
我需要按钮和退格键来删除光标位置之前的值。如果位置是3,我希望按钮消除链中的数字2,如果是5,则消除4 ...如何删除光标前的值?
修改: 我通过@ Seba99解决了我的问题。这是最终代码:
我的手机组件:
class Telefono extends Component {
constructor(props) {
super(props);
this.state = {
numberClicked: '',
inputContent: [],
currentKey: '',
};
this.deleteClickNumber = this.deleteClickNumber.bind(this);
}
deletePrevNumber(){
var string = this.state.inputContent.split("");
var ctl = document.getElementById('inputTelephone');
var startPos = ctl.selectionStart;
var endPos = ctl.selectionEnd;
string.splice((startPos - 1), 1);
this.setState({
inputContent: string.join(''),
numberClicked: string.join(''),
})
}
deleteClickNumber(evObject){
this.change = setTimeout(() => {
this.setState({
addClickedBottoms: '',
})
}, 300)
this.setState({
currentKey: evObject.keyCode
});
if(this.state.addClickedBottoms === ''){
this.setState({
addClickedBottoms: 'clicked',
})
}
if (this.state.inputContent !== ''){
this.deletePrevNumber();
}
}
render(){
return(
<div className="pad sb-content">
<div className="dial-pad">
<div className="phoneString">
<input type="text" ref="inputTelephone" value={this.state.inputContent.toString()} onChange={this.handleKeyPress} onKeyDown={this.handleKeyDown}/>
</div>
<div className="digits">
<Numbers
numbers={this.state.numbers}
letters={this.state.letters}
addClicked={this.state.addClicked}
updateNumber={this.updateNumber}
addClickedBottoms={this.state.addClickedBottoms}
deleteClickNumber={this.deleteClickNumber}
/>
</div>
<div className="digits">
<div className="dig call"><Icon icon="telefono" className='ico-telefono'/><span>LLAMAR</span></div>
</div>
</div>
</div>
);
}
}
这是我的数字组件中的删除按钮
<div onClick={this.props.deleteClickNumber}>
<Icon icon="borrar" className='ico-borrar'/>
</div>``
非常感谢您的帮助
答案 0 :(得分:1)
这是因为slice(0,-1)
总是删除数组中的最后一个元素...
可以使用负索引,指示与序列末尾的偏移量。 slice(2,-1)从序列中的倒数第二个元素提取第三个元素。
您应该查看sPlice function,它会删除所选索引处所需的元素数:
this.state.inputContent.splice(IndexOfTheCursor, 1);
this.setState({
inputContent: this.state.inputContent
})