【问题标题】:Validating React-Bootstrap-Typeahead input验证 React-Bootstrap-Typeahead 输入
【发布时间】:2019-08-21 16:04:21
【问题描述】:

我在表单中使用了 validation 函数,它检查字段是否为 empty。这适用于普通文本输入框,但不适用于 Typeahead 框。

我想检查 Typeahead 框是否为 ,如果是,则显示错误消息,即this.state.industryError

这是我的状态:

state = {
 name: "",
 industry: [],
 nameError: "",
 industryError: "",
}

这是我的 Typeahead 表单元素:

<Form>
 <Label>Industry</Label>
  <Typeahead
   id="industryMultiSelect"
   multiple
   options={industries}
   placeholder="Select industry..."
   onChange={this.handleTypeaheadChangeIndustry} />
    <div>
     {this.state.industryError}      // Where the error message appears
    </div>
</Form>

我的验证函数如下:

validate = () => {
    let nameError = "";
    let industryError = "";

    if(!this.state.name) {                  // Checks if field is empty
      nameError = "Please enter a name";
    }

    if(this.state.industry === []) {     // I think this is the problem
      industryError = "Please enter an industry";
    }

    if (nameError || industryError) {
      this.setState({nameError, industryError});

      return false;
    }
      return true;
  };

这是handleChange 函数,我需要预先输入:

handleTypeaheadChangeIndustry = selected => {
    const industry = selected.map(option => option.value);
    this.setState({industry})
  };

它适用于name 字段,因为它等于一个空字符串。但是使用 Typeahead,它不是字符串,所以我不确定将 this.state.industry 设置为什么。

非常感谢任何帮助或建议,如果您需要更多详细信息,我可以快速更新我的答案。

【问题讨论】:

  • 试试这个 - if(this.state.industry.length === 0)
  • 谢谢,我试过了,但问题是它总是显示错误消息 - 当输入为空时,什么时候不是。不过,这是朝着正确方向迈出的一步,所以谢谢。
  • 这是因为 if (nameError || industryError) { 当 nameError 为 true 时,它​​会设置这两个值。你需要 if-else 这里。
  • 我不认为是这样,因为当我完全删除nameError 时,我仍然遇到同样的问题。当我包含nameError 时,一旦输入一个值,消息(名称)就会被删除,但industryError 的消息总是存在的,所以我认为这与即使选择了一个值也有关对于工业来说,长度似乎仍然是 0
  • 你能把this.handleTypeaheadChangeIndustry的代码贴出来吗?

标签: javascript reactjs validation react-bootstrap react-bootstrap-typeahead


【解决方案1】:

如果不查看所有内容,很难确定您的代码为何无法运行。也就是说,我创建了一个沙箱,我相信它在使用您上面发布的代码后会执行您的操作:

https://codesandbox.io/s/react-bootstrap-typeahead-form-validation-686qe

正如@ravibagul91 所说,您应该使用其中一种

if (this.state.industry.length === 0) { ... }
if (!this.state.industry.length) { ... }

而不是

if (this.state.industry === []) { ... }

在我发布的沙箱中使用后者会导致代码无法正常工作,而使用前两者中的任何一个都可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-24
    • 2022-11-13
    • 2021-05-16
    • 2021-05-20
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 2021-10-08
    相关资源
    最近更新 更多