Радиокнопки странные в сочетании с обычной проверкой. Кажется, что событие проверки предназначено для того, чтобы вы могли проверять значение один раз, когда пользователь заканчивает ввод значения, а не каждый раз, когда значение изменяется, когда пользователь вводит его. Это имеет смысл для текстового поля, в котором вы хотите посмотреть завершенный текст, а не после каждого символа, который вводит пользователь. Но это немного более неясно для радио кнопок. На самом деле, я думаю, что вам следует избегать события проверки радио-кнопок и вместо этого использовать событие проверки контейнера (переключатели всегда должны быть во встроенном контейнере). Это позволяет пользователю клавиатуры выбирать / перемещаться по различным параметрам, чтобы получить тот, который им нужен, без повторных проверок при перемещении по параметрам. Затем, когда они перемещают фокус из поля группы (или любого контейнера, который вы использовали), вы можете проверить всю группу параметров одновременно. Это поведение более согласуется с проверкой других элементов управления. На самом деле я не вижу особой цели в использовании проверяющего события на отдельных переключателях. Единственная причина, которую я вижу, - это если вы хотите отменить новый выбор пользователя, не вызывая дополнительных событий щелчка. Но имейте в виду, что когда не выбрана ни одна радиокнопка и пользователь впервые нажимает на нее, событие проверки не произойдет! Переключатель не потерял фокус, и события проверки происходят только тогда, когда элемент управления теряет фокус. Вот почему я думаю, что вы должны просто избегать события проверки на переключателях и просто использовать событие проверки контейнера или событие щелчка переключателя.
Кроме того, я думаю, что если вы хотите быть милым с пользователями клавиатуры, вы должны отделить логику проверки от логики щелчков и использовать события соответствующим образом. Такие вещи, как включение элементов управления на основе того, какая опция выбрана, будут принадлежать событию щелчка переключателя, но сообщения об ошибках и предупреждения о выбранной в данный момент опции должны идти в событии проверки контейнера.
Редактировать: Вы задали конкретный вопрос о том, когда происходит одно событие, а не другое. Я бы добавил эту информацию в ответ на это:
- Validate будет вызываться без вызова click, если код является причиной изменения выбранной радиокнопки, при условии, что фокус переходит на радиокнопку (или контейнер, если вы используете событие проверки контейнера).
- Клик будет вызываться без (или я должен был сказать раньше) вызова validate, если не была выбрана ни одна радиокнопка, и пользователь нажимает одну из них (validate происходит только тогда, когда элемент управления теряет фокус). В конечном счете, для выбранной опции в конечном итоге произойдет проверка.
- Click будет вызываться без (или я должен был сказать раньше) вызова validate, если ваш обработчик validate не связан с конкретной опцией, которая была ранее выбрана, или с ее контейнером. Он будет вызываться для параметра, который теперь выбран (и контейнера), когда этот параметр (или контейнер) теряет фокус.
- Click может быть вызван без вызова validate, если ваш код, который просматривает значение, не требует, чтобы выбранный параметр терял фокус, прежде чем смотреть на него.