2016-07-28 44 views
2

删除我有一个input的setState - 不能从输入

<input type="text" value={this.state.current} onChange={this.handleChange.bind(this)} /> 

handleChange()方法:

handleChange(e) { 
    let val = parseInt(e.target.value); 
    if (val) { 
    this.set(val); 
    } 
} 

set()方法(图1和5之间的简单设定数量的状态):

set(val = 1) { 
    if (val < 1) { 
    val = 1; 
    } 
    if (val > 5) { 
    val = 5; 
    } 
    this.setState({ current: val }); 
} 

我的问题是:当我想改变输入值,ic不要删除它的号码。我认为这是自动填充从国家imediatly删除号码后。我的代码中的问题在哪里?

〔实施例上的jsfiddle:https://jsfiddle.net/4sc3p2ny/

+0

'set(val = 1)'只适用于init。即使我删除它('set(val)')我仍然不能从输入中删除数字。 – mwl

+0

如果你将删除set(val),它不会允许你改变,因为它显示值映射到'current',如果你将删除'set(val)'' –

回答

2

在这种情况下删除value={this.state.current}当你试图完全输入删除值,e.target.value回报''parseInt(e.target.value)返回NaN,因为parseInt('')回报NaN,你。需要检查并将current设置为空字符串

handleChange(e) { 
    let val = parseInt(e.target.value); 

    if (isNaN(val)) { 
    this.setState({ current: '' }); 
    } else { 
    if (val < 1) { 
     val = 1; 
    } 

    if (val) { 
     this.set(val); 
    } 
    } 
} 

Example

-1

input元素

+0

我不会改变我想他想让它成为一个受控组件,他如何努力做到这一点只是个问题。 –