Как отображать максимальную длину ввода, когда пользователь начинает печатать?

Поле ввода моего веб-сайта выглядит следующим образом: (нажмите здесь, чтобы просмотреть изображение)

Его код в файле jsx выглядит так:

render: function () {
    return (
        <form id="addcourse" role="form" className="form-horizontal" enctype="multipart/form-data" ref="courseForm">
            <fieldset>
                <CategoryLoader callback={this.handleCategoryChange}/>
                <div className="form-group">
                    <label className="control-label col-md-2 col-md-offset-1">Title</label>
                    <div className="col-md-7 col-md-offset-1">
                        <input name="title" type="text"  maxLength="6" id="abcd" className="form-control" ref="title" placeholder="Title (Maximum 100 characters)"/>
                    </div>
                </div>
                <div className="form-group">
                    <label className="control-label col-md-2 col-md-offset-1">Course Image</label>
                    <div className="col-md-7 col-md-offset-1">
                        <input name="image" type="file" className="form-control" ref="image"/>
                        <p className="help-block">Upload image for the course </p>
                    </div>
                </div>
                <div className="form-group">
                    <label className="control-label col-md-2 col-md-offset-1">Enrollment Type</label>
                    <div className="col-md-7 col-md-offset-1">
                        <select ref="enrollment_type" name="enrollment_type" className="form-control">
                            <option value="O">Open</option>
                            <option value="M">Moderated</option>
                        </select>
                    </div>
                </div>
                <div className="form-group">
                    <div className="col-md-2 col-md-offset-2  addcoursebutton">
                        <button ref="submit" className="btn btn-primary" type="button" onClick={this.add_course}>Add
                            Course
                        </button>
                    </div>
                    <div className="col-md-1">
                        <button type="button" onClick={this.props.closeCallBack} className="btn btn-danger">
                            Close
                        </button>
                    </div>
                </div>
            </fieldset>
        </form>
    );

Я пробовал maxLength=6.

Для ввода не требуется более 6 символов, но он не дает никаких ошибок, например, Максимальная длина составляет 6 символов.

Итак, когда пользователь начинает вводить текст в этом поле, я хочу, чтобы он отображал сообщение в поле ввода, допускается не более 6 символов.

Как я могу это сделать?


person Light Yagami    schedule 12.06.2018    source источник
comment
Ваш «вопрос» просто указывает ваше требование, а не какие-либо конкретные проблемы. Вы хотите отображать сообщение только тогда, когда они пытаются ввести больше? Если это так, вы можете добавить обработчик onKeyPress к <input/>, который проверяет длину всякий раз, когда они пытаются что-то напечатать, и добавить логику для отображения ошибки, если входное значение уже составляет 6 символов. Может быть просто простое логическое значение в состоянии, а затем условно отображать элемент с желаемым сообщением об ошибке «max chars = 6». Это только один пример.   -  person Jayce444    schedule 12.06.2018
comment
вы используете jQuery в своем проекте?   -  person Manoz    schedule 12.06.2018


Ответы (3)


попробуй это :

$(elementId).onchange(function(){
var len = this.val.length;
if (len > 5)
alert("You cannot exceed max of 6 characters").
});

вы также можете использовать событие onkeypress и любой другой тип результата, кроме предупреждения, что подходит

person Shahrukh Ahmad    schedule 12.06.2018
comment
У меня есть этот код выше в файле jsx в функции. Могу ли я поместить код, который вы дали, в файл jsx? Это будет работать? - person Light Yagami; 12.06.2018
comment
да надо.. попробуй. .но вы должны указать правильный 'elementid' (идентификатор вашего входного элемента). Я просто использую имя переменной.. - person Shahrukh Ahmad; 12.06.2018

Это довольно просто, и реагирующий способ сделать это - использовать состояние. если вам нужно больше объяснений, дайте мне знать. надеюсь, это поможет.

checkMaxLen = e => {
    if (e.target.value.length > 6) {
      this.setState({ errorText: "Length cant exceed more then 6" });
    } else {
      if (this.errorText) {
        this.setState({ errorText: "" });
      }
    }
  };


<input type="text"
  onChange={this.checkMaxLen}
/>
{this.state.errorText && <span>{this.state.errorText}</span>}
person Shubhanu Sharma    schedule 12.06.2018

Вы даже можете добиться этого только с помощью CSS. Вот объяснение

person Aliaksandr Sushkevich    schedule 12.06.2018