Progress Bar привязан к форме - PullRequest
1 голос
/ 06 марта 2020

Я сделал это (для развлечения и образования, я знаю, что это не самый эффективный)

https://codepen.io/paschos/pen/xxGXMQb

JS код Мне нужна помощь с

class App extends React.Component {

validate () {
    event.preventDefault();
    var name = document.getElementById("documentName").value;
    var email = document.getElementById("email").value;
    var re = /\S+@\S+\.\S+/;
    var type = document.getElementById("documentType");
    var typeChosen = type.options[type.selectedIndex].value;
    var category = document.getElementById("category");
    var categoryChosen = category.options[category.selectedIndex].value;

    if (name.length < 2 || name.length > 32) {
        alert("Invalid name length.");
    }
    else if (typeChosen === "" || categoryChosen === "") {
        alert("Please select a value from the dropdown list.");
    }
    else if (email.length > 128) {
        alert("Email exceedes character length.")
    }
    else if (re.test(email) === false) {
        alert("Invalid email adress.");
    }

}
getValue () {
    return "";
}

fillBar () {
    return (<progress max="100" value = {this.getValue()} id="progress">
            </progress>);
}

  render() {
    return (
        <form onSubmit = {this.validate}>
         <div className = "form-progress-bar">
         {this.fillBar()}
        </div>
        <label htmlFor="documentName">Input the document name:</label>
        <br />
          <input id = "documentName"
          type="text" 
          placeholder="Document Name" 
        />
        <br />
        <label htmlFor="documentType">Select document type:</label>
        <br />
        <select className = "dropdown" id = "documentType">
        <option defaultValue = ""> </option>
        <option value = "Plain" label = "Plain" />
        <option value = "PDF" label = "PDF" />
        </select> 
        <br />
        <label htmlFor="category">Select document category:</label>
        <br />
        <select className = "dropdown" id = "category">
        <option defaultValue >  </option>
        <option value = "Audit" label = "Audit" />
        <option value = "Application" label="Application" />
        <option value = "Other" label = "Other" />
        </select>
        <br />
        <label htmlFor="email">Input your email adress:</label>
        <br />
        <input id = "email"
          type="text" 
          placeholder="Email" 
        />
        <br />
        <button id = "button">Submit</button>
      </form>
    );
  }
}

ReactDOM.render(
  <App />,
  document.getElementById('app')
);

Я застрял на том, как добавлять 25 к значению прогресса при каждом заполнении поля формы.

Кодовое перо содержит код html и css а также

Любая помощь приветствуется!

1 Ответ

2 голосов
/ 06 марта 2020

Вы можете добавить обработчик изменений и установить свое состояние в зависимости от того, заполнено ли поле или нет. Затем в функции получения значения вы суммируете все истинные значения в состоянии.

Пример:

state = {
    (each field)
    emailFilled: false,
}

handleChange = (stateKey) => (event) => {
    const value = event.target.value;
    this.setState({
        [stateKey]: Boolean(value),
    });
}

getValue = () => {
    let value = 0;
    if(this.state.emailFilled) {
        value += 0.25;
    }
}

...
render(){
    ...
    <input id="email"
        type="text"
        placeholder="Email"
        onChange={this.handleChange('emailFilled')}
    />
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...