クライアントサイドで入力のバリデーションを行うフォームが増えた気がするけれど、フォーカスした瞬間にメールアドレスが空です、とか言われてもそんなの知っているわ、って感じだし、パスワードを2回入力して確認させるフォームで1つ目のインプットに入力をはじめるとパスワードが一致しない、って言われるのも、そんなのまだ確認していないんだから当たり前だろう、と思う。

こういう些細なところでイラつかせるの、実装するとき・デバッグするときに考えることと、実際に使うときに考えることに乖離があるからだと思う。

こういうバリデーションを実装するとき、個々の入力についてとりうる値を決めて、入力イベントが発生したら入力されている内容が妥当かどうか調べて、妥当でなければフィードバックする、みたいになるだろうと思う。

でも実際に使うとき・入力するときはシーケンシャルに操作されうる。パスワードを2回入力する欄を設けてあるときにうっとうしいバリデーションを行ってしまうのは、パスワードを2回入力するとき、人間が操作すると順番に行われる、ということを想像できないからではないか。コード (JS) を書いているとここの入力が一致していればよい、みたいに状態を並列に扱って考えるけれど、実際には直列に考えられて操作される。

ところでクライアントサイドのバリデーションと呼ばれるものは、実際のところ人間むけのユーザエージェントにのみ存在している。また Web アプリケーションの性質からいっても、クライアントサイドのバリデーションというのは実のところ単なるユーザインタラクションでしかないと思う。