【问题标题】:when the characters in the text box is more than 3 i need to add border当文本框中的字符超过 3 个时,我需要添加边框
【发布时间】:2017-05-28 02:01:33
【问题描述】:
  • 当文本框中的字符超过 3 个时,我需要为 texbox 添加边框。
  • 所以我添加了 className wholeContainer
  • 不确定何时添加 state 和 setState。我是否需要在 css 中为类名创建状态
  • 你们能告诉我如何解决它吗?
  • 在下面提供。

https://jsfiddle.net/q7yvmsa3/14/

class TwitterBox extends React.Component {

    constructor(props) {
        super(props);
        this.state = { enteredTextBoxvalue : '' };
    this.handleChange = this.handleChange.bind(this);
    }

  handleChange(event) {
    this.setState({enteredTextBoxvalue: event.target.value});   
    console.log((event.target.value).legth);

    if((event.target.value).legth > 3) {    
        this.setState({className : wholeContainer});
        //console.log("long characters");
    }
  }

    render() {
        return (<div>Hello {this.props.name}
                        <textarea className={this.state.className}
                value={this.state.enteredTextBoxvalue}
                onChange = {this.handleChange}>
                            there should be only 140 characters
                    </textarea>
        </div>);
    }
}


ReactDOM.render(
  <TwitterBox name="World" />,
  document.getElementById('container')
);

【问题讨论】:

  • if((event.target.value).legth > 3) { => length 拼写不正确。很可能是报错,你能检查一下控制台吗?
  • this.setState({className : wholeContainer}); 是问题所在。除了 Paul 建议的拼写错误之外,您的其余代码都有效。因此未定义 WholeContainer。
  • @almostabeginner 嘿,但文本框变成红色...只有当我点击外部时
  • 这是浏览器兼容性问题。在 IE 11 中对其进行了测试,它可以工作,但在 Chrome 中对其进行了测试,但它没有。 Chrome 仍然可以工作,但所选输入框的蓝色并没有被删除。可以看到颜色的变化,那是因为应用了红色,但没有覆盖“选中的输入框样式”。
  • 这是它在 chrome 中的行为示例。 jsfiddle.net/cfztjbyq

标签: javascript html css reactjs redux


【解决方案1】:

所以,固定长度并在 WholeContainer 周围添加引号。这两个变化对我很有效。

if((event.target.value).length > 3) {    
    this.setState({className : 'wholeContainer'});

顺便说一句,还有另一个不相关的错误,只是让您知道: (不确定它是否与小提琴有关,还是您处理的一部分)

SyntaxError: expected expression, got '<'
https://fiddle.jshell.net/_display/ Line 85
return (<div>Hello {this.props.name}
========^

小提琴图片:

【讨论】:

  • 更新了小提琴中的代码,但我仍然看不到文本框的边框颜色jsfiddle.net/q7yvmsa3/19
  • 添加了我在小提琴中的样子。
  • 嘿,但是文本框变成了红色......只有当我点击外面
  • 有趣...我不知道,我只输入了框中显示的四个字符(注意光标仍在文本区域中),之后边框变为红色'f' 是输入的吗?我又试了一次,行为还是一样的。你使用的是什么浏览器? (我用的是FF)
  • 我正在使用 chrome
【解决方案2】:

好的,根据 Paul T 的回答,原始问题已修复,关于跨浏览器功能,您可以使用以下编辑:

https://jsfiddle.net/c9zv7yf5/

JS:

class TwitterBox extends React.Component {

    constructor(props) {
        super(props);
        this.state = { enteredTextBoxvalue : '' };
        this.handleChange = this.handleChange.bind(this);

    }

  handleChange(event) {
    this.setState({enteredTextBoxvalue: event.target.value});   

    if((event.target.value).length > 3) {

        this.setState({className : 'wholeContainer'});
        //console.log("long characters");

    }
  }




    render() {
        return (<div>Hello {this.props.name}
                        <textarea className={this.state.className}
                value={this.state.enteredTextBoxvalue}
                onChange = {this.handleChange}>
                            there should be only 140 characters
                    </textarea>
        </div>);
    }
}

ReactDOM.render(
  <TwitterBox name="World" />,
  document.getElementById('container')
);

css:

.wholeContainer {
  outline: none !important;
  border:1px solid red;
}

HTML:

<script src="https://facebook.github.io/react/js/jsfiddle-integration-babel.js"></script>

<div id="container">
    <!-- This element's contents will be replaced with your component. -->
</div>

【讨论】:

  • 感谢您提供额外的跨浏览器信息。很高兴我问了哪个浏览器,因为我不确定为什么 OP 没有看到我做了什么(通常假设使用相同的浏览器)。投票!
  • 我使用状态和设置状态是否正确...我很困惑
  • @texirv 是的,问题是您没有将字符串传递给 className,因此在 WholeContainer 周围引用了引号。
  • 你好我需要使用组件生命周期的任何方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
相关资源
最近更新 更多