input 限制字数输入时候 限制字数会出现负数

如下图这是bug效果:

解决方法:

由于用的是React写法如下:
复制代码
// render: 
<input
    maxLength={NAMETOTAL}
    placeholder={'点击填写作品名称'}
    type="text"
    value={workName}
    onChange={this.handleChangeTitle}
    onCompositionEnd={this.handleChangeTitleCountNum}
    onCompositionStart={this.handleChangeTitleCountNum}
/>
// 上面的函数:
/* 
* NAMETOTAL:总长度
* workName: 名字
* countNum:是否开始计数
* workNameFontLimit:作品名称字数限制
*/
handleChangeTitle (e) {
    this.setState({
        workName: e.target.value
    }, () => {
        if (!this.state.countNum) {
            this.setState({
                workNameFontLimit: NAMETOTAL - this.state.workName.length
            });
        }
    });
}
handleChangeTitleCountNum (e) {
    if (e.type === 'compositionend') {
        this.setState({
            countNum: false
        }, () => {
            this.setState({
                workNameFontLimit: NAMETOTAL - this.state.workName.length
            });
        });
    } else if (e.type === 'compositionstart') {
        this.setState({
            countNum: true
        });
    }
}

复制代码

相关知识点

compositionstart 事件触发于一段文字的输入之前
(类似于 keydown 事件,但是该事件仅在若干可见字符的输入之前,而这些可见字符的输入
可能需要一连串的键盘操作、语音识别或者点击输入法的备选词)。

compositionend当文本合成系统(如输入法编辑器)完成或取消当前合成会话时,将触发该事件。
复制代码

转载于:https://juejin.im/post/5cb871e2f265da03914d5bb1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值