如何用内容改变textarea的高度?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用内容改变textarea的高度?相关的知识,希望对你有一定的参考价值。

我试图根据内容高度更改textarea的高度。我发现事件处理程序不会改变高度,因为它被bootstrap样式覆盖。请帮忙!

class PostForm extends React.Component {
  constructor(props){
    super(props);
    this.state = {titleHeight: '30', storyHeight: 1};                                                    
    this.handleKeyUp = this.handleKeyUp.bind(this);
  }
  handleKeyUp(event){
    this.setState({titleHeight: document.getElementById('post_title').scrollHeight});
    this.setState({storyHeight: document.getElementById('post_story').scrollHeight});
  }
  render () {
        var csrfToken = $('meta[name=csrf-token]').attr('content');
        return (
          <form action='create' method='post' acceptCharset='UTF-8' className= "form-group">
            <input type='hidden' name='_method' value='patch'/>
            <input type='hidden' name='utf8' value='✓' />
            <input type='hidden' name='authenticity_token' value={csrfToken} />
            <textarea id="post_title" name="post[title]" className="form-control boldText" style={formStyle.textArea} height={this.state.titleHeight} onKeyUp={this.handleKeyUp} placeholder="Title"/>
            <textarea id="post_story" name="post[story]" className="form-control" style={formStyle.textArea} height={this.state.storyHeight} onKeyUp={this.handleKeyUp} placeholder="Start telling the story"/>
            <input name="commit" type="submit" value="Post" className="btn" style={formStyle.button}/>
          </form>
        );
  }
}

const formStyle = {
  textArea: {
    border: 5,
    boxShadow: 'none',
    margin: 5,
    overflow: 'hidden',
    resize: 'none',
    ariaHidden: 'true',
  },
  button: {
    backgroundColor: 'black',
    color: 'white',
    width: 70,
    marginLeft: 18,
    marginRight: 5,
  },
}
答案

textarea HTML component没有属性height,但你可以用于此目的的属性rows(例如<textarea rows={Math.round(this.state.storyHeight)} ... />)。

没有CSS样式会覆盖你在style属性中传递的内容,它的工作方式相反。但无论如何,你的height定义中没有formStyle

另一答案

你可以用ref属性做你想做的事

export default class Textarea extends Component {

  componentDidMount () {
    if (this.multilineTextarea) {
      this.multilineTextarea.style.height = 'auto';
    }
  }

  changeTextarea = () => {
    this.multilineTextarea.style.height = 'auto';
    this.multilineTextarea.style.height = this.multilineTextarea.scrollHeight + 'px';
  }

  render () {
    return (
      <textarea
        onChange={this.changeTextarea}
        ref={ref => this.multilineTextarea = ref}
      />
    );
  }
}

Also here is working DEMO

以上是关于如何用内容改变textarea的高度?的主要内容,如果未能解决你的问题,请参考以下文章

如何用Three.js改变CubeGeometry的宽度?

怎么让textarea的宽度不能改变?高度可以调整?

textarea 动态填充内容 文本框高度自适应

如何用CSS使图片自适应显示宽度

如何用JS获取鼠标滚动高度,再触发相应的事件。速救!!!

textarea高度自适应问题