【问题标题】:Clear textarea after enter key输入键后清除文本区域
【发布时间】:2016-11-15 09:18:54
【问题描述】:

我想在输入键按下反应后清除文本区域内容。但是,当按回车键时,文本区域会清除,但回车键仍然存在(新行)。我怎样才能解决这个问题?

constructor(){
    this.state = { text : '' }
}

keypress(e){ 
   if(e.key == 'Enter'){
      this.setState({
        send_message: ''
      })
   }
}

<textarea value={this.state.text} placeholder="Text" rows="1" className="form-textarea typing-area" onKeyPress={this.keypress.bind(this)}></textarea>

【问题讨论】:

  • 尝试在按键功能的末尾添加return false;

标签: javascript reactjs


【解决方案1】:

当键为“Enter”时,您可以使用event.preventDefault

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = { text : '' }
    this.handleChange = this.handleChange.bind(this);
    this.keypress = this.keypress.bind(this);
  }
  
  handleChange(event) {
    this.setState({text: event.target.value});
  }
  
  keypress(e){ 
    if(e.key === 'Enter'){
      e.preventDefault();
      this.setState({
        send_message: this.state.text,
        text: '',
      });
    }
  }
  render() {
    return (
      <div>
        <textarea 
          value={this.state.text} 
          placeholder="Text" 
          rows="1" 
          className="form-textarea typing-area" 
          onChange={this.handleChange}
          onKeyPress={this.keypress} 
        />
        <pre>{JSON.stringify(this.state, null, 2)}</pre>
      </div>
    );
  }
}

ReactDOM.render(<App />, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>

【讨论】:

  • 正确。谢谢
【解决方案2】:

假设这个文本区域是为了让您的用户离开 cmets。我会将我的文本区域放置在表单元素和 onSubmit 中,并使用您将在渲染上方定义的 handleSubmit 函数:

handleChange = (event) => {
    this.setState({ comment: event.target.value });
  };
handleSubmit = (event) => {
    event.preventDefault();

    this.setState({ comment: '' });
  };
render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <h4>Add a Comment</h4>
        <textarea onChange={this.handleChange} value={this.state.comment} />
        <div>
          <button>Submit Comment</button>
        </div>
      </form>
    );
  }

注意handleSubmit 我添加了e.preventDefault(),因为它是一个表单元素,HTML 表单元素的默认行为是提交。然后我添加了一个this.setState(),其中包含一个带有注释属性和一个空字符串值的对象,以便您的文本区域可以清空。在你的情况下,你可以称之为{ text: '' }

请注意,我还有一个带有{this.handleChange}onChange 事件处理程序。 handleChange 接收此 event 对象,您的 text 状态或在我的情况下为 comment 状态的新值将来自 event.target.value

在您开发此组件的过程中,我还将对其进行测试。所以考虑一个测试,找到 textarea 元素,模拟一个更改事件,提供一个假事件对象,强制组件更新,然后断言文本区域确实改变了它的值。在这样的测试中,您需要手动设置 event.target.value 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 2019-01-12
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多