Два события handleChange с использованием опции множественного выбора в реагировать JS - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь написать (две) несколько выбранных опций, используя две функции изменения дескриптора, я не думаю, что это не очень хорошая практика, поскольку в двух выбранных опциях мне приходится связывать эти данные отдельно, не мешая другим нескольким выбраннымопция.

import React, { Component } from 'react';

class AddEvent extends Component {
  constructor() {
    super();
    this.state = {
      speaker: [''],
      hash_tag: ['']
    };
    this.handleChange = this.handleChange.bind(this);
  }
  handleChange(event) {
    var options = event.target.options;
    var value = [];
    for (var i = 0, l = options.length; i < l; i++) {
      if (options[i].selected) {
        value.push(options[i].value);
      }
    }
    this.setState({ value: value });
  }

  handleChange(event2) {
    var options2 = event2.target.options;
    var value2 = [];
    for (var j = 0, l = options2.length; j < l; j++) {
      if (options2[j].selected) {
        value2.push(options2[j].value);
      }
    }
    this.setState({ value: value2 });
  }

  render() {
    return (
      <div className="col-md-12">
        <h3>Add Events</h3>
        <form onSubmit={this.handleSubmit}>
          <div className="col-md-6">
            <div className="form-group">
              <label>Event Speaker:</label>
              <select
                data-style="btn-default"
                className="form-control"
                multiple
                data-max-options="3"
                value={this.state.value}
                onChange={this.handleChange}
              >
                <option value="Vivek Srinivasan">Vivek Srinivasan</option>
                <option value="Salma Moosa">Salma Moosa</option>
                <option value="Rengaprasad">Rengaprasad</option>
              </select>
            </div>
          </div>
          <div className="col-md-6">
            <div className="form-group">
              <label>Event Hash Tags:</label>
              <select
                data-style="btn-default"
                className="form-control"
                multiple
                data-max-options="3"
                value={this.state.value}
                onChange={this.handleChange2}
              >
                <option value="hash_tag_1">hash_tag_1</option>
                <option value="hash_tag_2">hash_tag_2</option>
                <option value="hash_tag_3">hash_tag_3</option>
                <option value="hash_tag_4">hash_tag_4</option>
                <option value="hash_tag_5">hash_tag_4</option>
              </select>
            </div>
          </div>

          <div className="col-md-12">
            <div className="form-group">
              <label>Event Content</label>
              <textarea
                id="summernote"
                value="Type Here "
                onChange={val => this.setState({ content: val.target.value })}
              />
            </div>
          </div>

          <div className="col-md-3">
            <button className="btn btn-block btn-primary btn-lg" type="submit">
              Save Event
            </button>
          </div>
        </form>
      </div>
    );
  }
}
export default AddEvent;

1 Ответ

0 голосов
/ 11 октября 2018

Я не совсем понимаю, почему вы не хотите использовать разные обработчики для каждого элемента select.Тем более, что вы уже написали две функции-обработчика.Возможно, я неправильно понял ваш вопрос.

На мой взгляд, у вас есть три основные проблемы.

1) У вас не может быть двух функций с одинаковым именем, как вы делаете с handleChange.

2) В вашем текущем коде вы ссылаетесь на функцию, которая не существует(handleChange2).

3) В обеих функциях handleChange вы переопределяете свойство value в состоянии с другим, поскольку оба изменяют значение свойства в состоянии.

Переименование последней функции handleChange в handleChange2 решит проблемы 1 и 2.

Третья проблема будет решена наличием двух свойств-значений в вашем состоянии, например, value1 и value2 (хотя я бы предложилиспользуя более описательные имена).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...