Это может не дать прямого ответа на ваш вопрос, но эта проблема может быть решена с помощью простых настроек уровня дизайна. Я понимаю, что это не может быть на 100% применимо ко всем случаям использования, но я настоятельно призываю вас подумать о переосмыслении вашего пользовательского потока вашего приложения и возможности реализации следующего предложения по проектированию.
Я решил сделать что - то простое , чем взлом альтернатив для onChange()
использования других событий , которые не были на самом деле предназначены для этой цели ( blur
, click
и т.д.)
Как я это решил:
Просто предварительно ожидайте тег-опцию-заполнитель, например select, который не имеет значения.
Таким образом, вместо использования следующей структуры, которая требует хакерских альтернатив:
<select>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
Рассмотрите возможность использования этого:
<select>
<option selected="selected">Select...</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
Таким образом, ваш код намного упрощен и onChange
будет работать, как и ожидалось, каждый раз, когда пользователь решает выбрать что-то отличное от значения по умолчанию. Вы даже можете добавить disabled
атрибут к первому параметру, если не хотите, чтобы они выбирали его снова и заставляли выбирать что-либо из параметров, таким образом вызываяonChange()
пожар.
Во время ответа я пишу сложное приложение Vue и обнаружил, что этот выбор дизайна значительно упростил мой код. Я потратил часы на эту проблему, прежде чем освоился с этим решением, и мне не пришлось переписывать много кода. Однако, если бы я использовал альтернативные варианты, мне пришлось бы учитывать крайние случаи, предотвращать двойное срабатывание запросов ajax и т. Д. Это также не портит поведение браузера по умолчанию в качестве приятного бонуса (протестировано на мобильных устройствах). браузеры также).
Иногда вам просто нужно сделать шаг назад и подумать над общей картиной для самого простого решения.