# Text not allowed in element “select” in this context.

> Canonical HTML version: https://rocketvalidator.com/html-validation/text-not-allowed-in-element-select-in-this-context
> Attribution: Rocket Validator (https://rocketvalidator.com)
> License: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

Direct text nodes inside `select` are not permitted content. Browsers typically ignore or mangle that text, leading to inconsistent rendering and confusing experiences for screen reader users. It also breaks conformance, which can impact maintainability and automated tooling. The right approach is to keep instructional text in a corresponding `label`, or provide a non-selectable prompt using a disabled, selected `option`. Group labels must be provided with `optgroup` elements, not free text.

To fix it, remove any raw text inside the `select`. If you need a prompt, add a first `option` with `value=""` and `disabled selected hidden` for a placeholder-like experience, or rely on a visible `label`. Ensure all selectable items are wrapped in `option`, and any grouping uses `optgroup` with its `label` attribute. Always associate the `select` with a `label` via `for`/`id` for accessibility.

## Examples

### Triggers the error (text node inside `select`)
```html
<select>
  Please select an option:
  <option value="1">Option 1</option>
  <option value="2">Option 2</option>
</select>
```

### Correct: move instructions to a `label`
```html
<label for="flavor">Please select a flavor:</label>
<select id="flavor" name="flavor">
  <option value="vanilla">Vanilla</option>
  <option value="chocolate">Chocolate</option>
</select>
```

### Correct: provide a non-selectable prompt inside `select`
```html
<label for="country">Country</label>
<select id="country" name="country" required>
  <option value="" disabled selected hidden>Select a country</option>
  <option value="us">United States</option>
  <option value="ca">Canada</option>
</select>
```

### Correct: use `optgroup` for grouping, not free text
```html
<label for="city">City</label>
<select id="city" name="city">
  <optgroup label="USA">
    <option value="nyc">New York</option>
    <option value="la">Los Angeles</option>
  </optgroup>
  <optgroup label="Canada">
    <option value="toronto">Toronto</option>
    <option value="vancouver">Vancouver</option>
  </optgroup>
</select>
```

### Correct: full document (for context)
```html
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Select without stray text</title>
  </head>
  <body>
    <form>
      <label for="size">Choose a size:</label>
      <select id="size" name="size">
        <option value="" disabled selected hidden>Select a size</option>
        <option value="s">Small</option>
        <option value="m">Medium</option>
        <option value="l">Large</option>
      </select>
    </form>
  </body>
</html>
```

Tips:
- Put instructions in a `label` or surrounding text, not inside `select`.
- Every choice must be an `option`; use `optgroup` with `label` to name groups.
- For placeholders, prefer a disabled, selected first `option`; avoid raw text nodes.
