如何删除光标前的值-React

时间:2019-05-24 06:56:06

标签: javascript reactjs cursor-position

我用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>``

非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

这是因为slice(0,-1)总是删除数组中的最后一个元素...

截至documentation

  

可以使用负索引,指示与序列末尾的偏移量。 slice(2,-1)从序列中的倒数第二个元素提取第三个元素。

您应该查看sPlice function,它会删除所选索引处所需的元素数:

this.state.inputContent.splice(IndexOfTheCursor, 1);
this.setState({
     inputContent: this.state.inputContent
})