【问题标题】:Adding <textarea> tag inside a <select> tag after clicking an option on React.js单击 React.js 上的选项后,在 <select> 标记内添加 <textarea> 标记
【发布时间】:2019-07-30 17:10:28
【问题描述】:

所以基本上,我得到了以下 JSX 文件,我想要一个事件处理程序来监听在制造商部分中单击 “其他” 后生成的事件。请在名为“颜色”的&lt;select&gt; 标记内和&lt;Fragment&gt; 标记内找到提到的选项作为最后一个&lt;option&gt; 标记。另外,请忽略已经存在的 OnClick 功能;它在这个问题上没有用。

我想要生成的事件非常特殊。它应该在下拉菜单中的“其他”选项所在的位置添加一个文本区域(或输入,不完全确定),以便用户能够键入他们在当前颜色选择中没有找到的其他选项.

我怎样才能做到这一点?

import React, { Fragment} from 'react';
import { StyledSection, StyledSectionColLeft, StyledSectionCol } from '../../../common/theme/cssStyledColumns';
import { Textarea, Select, Input, MandatoryInfo } from '../../../common/form';

const ApplianceDetails = () => (
  <Fragment>
    <h2>Appliance details</h2>
    <MandatoryInfo />
    <StyledSection>
      <StyledSectionColLeft>
        <Select name="colour" label="Colour *">
          <option value="">-Select-</option>
          <option value="Vokera">Blue</option>
          <option value="Warmflow">Red</option>
          <option value="Worcester">Yellow</option>
          <option onClick={console.log('Click happened')} value="Other">Other</option>
        </Select>
        <Input name="model" label="Model *" />
      </StyledSectionColLeft>
      <StyledSectionCol>
        <Input name="location" label="Location *" />
      </StyledSectionCol>
    </StyledSection>
  </Fragment>
);

export default ApplianceDetails;

【问题讨论】:

标签: javascript reactjs forms drop-down-menu jsx


【解决方案1】:

您可以根据select 的值在input/textarea 上设置一个类。像这样:

<Select value={this.state.selectedOption} onChange={this.handleSelect} name="colour" label="Colour *">
  <option value="">-Select-</option>
  <option value="Vokera">Blue</option>
  <option value="Warmflow">Red</option>
  <option value="Worcester">Yellow</option>
  <option value="Other">Other</option>
</Select>

// Or textarea
<input type="text" value="" name=" className={this.state.selectedOption !== 'Other'?"hidden":""}/>

这会在您的输入中添加一个 hidden 类。现在你可以使用.hidden{ diplay:none; }

这个函数会处理你的值的变化:

handleSelect(evt){
  this.setState({
    selectedOption: evt.target.value
  })
}

【讨论】:

  • 我在浏览器(谷歌浏览器)中的控制台显示以下错误:Parsing error: Unexpected token, expected ";" 所以我更改了您的语法并写道:handleSelect = (evt) =&gt; { this.setState({ selectedOption: evt.target.value }) } 但它不起作用,我得到以下信息错误:'handleSelect' is not defined no-undef 有什么想法吗?
  • 你在构造函数中添加this.handleSelect = this.handleSelect.bind(this);了吗?
  • 是的,我做到了。我在我的选择标签内的onChange 事件中添加了this.handleSelect = this.handleSelect.bind(this); 部分,我得到的第一个错误是经典的Parsing error: Unexpected token, expected "}" 指出分号。我删除分号并得到以下信息:Line 69: Parsing error: Unexpected token, expected ";"&gt; 69 | handleSelect(evt){| ^ 我认为这是由语法错误引起的。有什么想法吗?
  • 编辑:第一次,控制台指出分号,第二次指出函数名称 handleSelect(evt) 后面的括号
猜你喜欢
  • 2020-08-20
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 2019-08-22
  • 2017-02-17
  • 1970-01-01
相关资源
最近更新 更多