【问题标题】:How to remove the value before the cursor - React如何删除光标前的值 - React
【发布时间】:2019-05-24 06:56:05
【问题描述】:

我用 React 创建了一个电话,无论你按下按键还是使用键盘,都将数字存储在 input 中。

电话工作正常,但按删除按钮或退格键总是会删除链中的最后一个值。

我需要按钮和退格键来删除光标位置之前的值。如果位置是 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>
        );
    }
}

这是我的 Numbers 组件中的删除按钮

<div onClick={this.props.deleteClickNumber}>
  <Icon icon="borrar" className='ico-borrar'/>
</div>``

非常感谢您的帮助

【问题讨论】:

    标签: javascript reactjs cursor-position


    【解决方案1】:

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

    截至documentation

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

    您应该查看sPlice function,它删除了您想要在所选索引处的元素数量:

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

    【讨论】:

    • 您好,很抱歉拖了太久才回复。我已经用您的更改更新了代码,但出现以下错误:this.state.inputContent.splice is not a function
    • 好吧,好吧,至少你明白你在做什么了吗?我的代码不应该只是复制/粘贴到您的项目中,它需要进行一些修改...以便将我称为 IndexOfTheCursor 的参数的值设置为正确的值...
    • 我试着理解你在做什么。我认为它不起作用,因为“拼接”需要一个数组而不是一个字符串......我修改了它,但我仍然没有检测到 IndexOfTheCursor,它给出了未定义的。现在,如果我点击删除整个数组,而不仅仅是一个元素
    • inputContent 是一个字符串?那为什么要这样初始化呢? :inputContent: [],然后您在渲染中对其进行转换:this.state.inputContent.toString()deletePrevNumber 函数中您正在做一些奇怪的事情var string = [this.state.inputContent]; ...您决定但保持该变量的类型相同整个代码!顺便说一句,IndexOfTheCursor 仍然未定义,因为您没有将其传递给此处的调用:if (this.state.inputContent !== ''){this.deletePrevNumber();}
    • 非常感谢,给您带来的不便,我们深表歉意。我不知道我的解决方案是否是最好的解决方案,但我的代码有效。如果你认为你可以做得更好,我很想知道。再次感谢
    猜你喜欢
    • 1970-01-01
    • 2021-07-12
    • 2022-01-02
    • 2021-04-14
    • 2021-12-20
    • 2012-09-02
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    相关资源
    最近更新 更多