Select 下拉菜单,使默认值不可选

Select Dropdown, make default Value not a selectable option

我有一个表格需要用户填写。我有一系列可供他们选择的选项,但我不希望其中任何一个成为默认选项。我希望下拉菜单显示类似 --Select-- 的内容。那么当用户selects下拉时,就不能再select--Select--.

我正在使用 Redux 表单和 React-Bootstrap 进行演示。我在 Stack Overflow 上看到了一些答案,他们说将选项设置为禁用或将其添加为选项组。这解决了下拉菜单打开时的行为方式,但将该选项作为默认选项删除。

  let selectOptions = options.map((option, index) => {
    return (
      <option key={index} value={option}>
        {option}
      </option>
    );
  })
  const {value, ...inputs} = input
  
    return (
    <Aux>
      <Form.Label className="mb-1">{label}</Form.Label>
      {explanation && !readonly ? (
        <OverlayTrigger
          trigger="click"
          key={"right"}
          placement={"right"}
          overlay={
            <Popover id="popover-basic">
              <Popover.Header as="h3">{label}</Popover.Header>
              <Popover.Body>{explanation}</Popover.Body>
            </Popover>
          }
        >
          <i className="material-icons text-info align-top ml-2 cursor">help</i>
        </OverlayTrigger>
      ) : null}
      <Form.Control
        className={`${formStyle} ${validationStyle} ${noValidationStyle}`}
        disabled={readonly}
        as="select"
        placeholder="select"
        {...input}
        isInvalid={(touched || attempt) && !!error}
        isValid={!error}
      >
        {selectOptions}
      </Form.Control>

      {(touched || attempt) && !!error && !readonly ? (
        <Form.Control.Feedback type="invalid" className="animated fadeIn">
          {error}
        </Form.Control.Feedback>
      ) : (
        <span>{"\u00A0"}</span>
      )}
    </Aux>

select element 有一个方便的 .remove 方法供您使用。

例如:

const selectEl = document.querySelector("#dropdown")
selectEl.addEventListener("change", removeDefault);

function removeDefault(event){
  const selectEl = event.target;

  if(selectEl.options[0].value == "myDefault"){
    selectEl.remove(0);
  }
}
select { width: 9em; font-size: 2em; }
<select id="dropdown">
  <option value="myDefault">Choose Wisely</option>
  <option value="river">River</option>
  <option value="mal">Mal</option>
  <option value="zoe">Zoe</option>
  <option value="book">Shepherd Book</option>
</select>