コンテンツにスキップ

084. Auto-focus(フォーカス制御:更新が終わったあと、すぐに「入力」を始められるようにする)

原理:ユーザーの「手のひら」を迷わせない

入力の手を止めない優しさ

Webアプリを使っていて、こんなストレスを感じたことはありませんか? 「ボタンを押して新しい入力欄が出てきたのに、キーボードで打とうとしたら反応しない。いちいちマウスでその欄をクリックし直さないと入力が始まらない……」 この「キーボードを打てる状態にする」ことを「フォーカス(焦点を当てる)」と呼びます。

HTMXで画面の一部が新しくなったとき、ブラウザは「今どこに入力中だったか」を時々見失ってしまいます。 autofocus という標準のHTML属性とHTMXを正しく組み合わせることで、「画面が更新された瞬間に、自動的にその入力欄にカーソルがピコピコと点滅し、すぐに打ち始められる状態」を作ることができます。


実践:流れるような検索と入力の体験

1. 標準の属性を活かす(autofocus)

サーバーが返す新しいHTMLの要素に、autofocus と書いておくだけで、HTMXはそれを賢く認識して、配置が終わったあとに焦点を合わせてくれます。

<!-- サーバーが返すHTMLの例 -->
<div>
    <h3>新しいキーワードを入力してください</h3>
    <!-- 画面に出現した瞬間、ここに入力カーソルが当たります -->
    <input type="text" name="new_q" autofocus>
</div>

2. 入力バリデーション(チェック)での活用

「メールアドレスが間違っています」というメッセージと共に、もう一度メールアドレスの入力欄を返したとき、自動でそこにフォーカスが戻っていれば、ユーザーはすぐに修正を始められます。

3. ステップ・バイ・ステップ解説

  1. サーバー側の準備: 次にユーザーが操作すべき要素(<input><button> など)に autofocus 属性を付けたHTMLを用意します。
  2. HTMXの配置(Swap): いつも通り hx-target などで画面を更新します。
  3. 自動実行: HTMXがHTMLをDOMに配置(Settle)した直後、ブラウザが「あ、ここをフォーカスしなきゃ」と判断してくれます。

比較:手動のJSフォーカス vs オートフォーカス

JavaScript で書く場合

document.body.addEventListener('htmx:afterSettle', () => {
    document.getElementById('my-input').focus();
});
特定のIDに対して個別に命令を書く必要があり、項目が増えるほどメンテナンスが大変になります。

HTMX + autofocus 属性

<input autofocus>
命令は不要。HTML(タグ)そのものが「自分にフォーカスして」という意志を持っているため、非常にクリーンで管理しやすいです。


まとめ:初心者のための「リズム」の作り方

オートフォーカスを適切に配置することは、ユーザーの「操作のリズム」を守るための、目立たないけれど大きな優しさです。

  • クリック一回の節約: 「マウスを持たなくていい」という体験は、キーボード操作に慣れたユーザーにとって最強のギフトになります。
  • どこに注目すべきか導く: 画面の広い範囲が更新されたとき、次にどこを見ればいいか、どこに入力すればいいかをカーソルの点滅でそっと教えてあげましょう。
  • 「やりすぎ」に注意: ユーザーが予期しないタイミングで勝手にカーソルが移動すると、逆に入力の邪魔になってしまいます。新しい入力が明らかに「主役」のときにだけ使いましょう。

視線と指先を、迷わせない。autofocus という小さな属性を使いこなして、止まることのない、心地よいWebアプリの操作感を実現してください。次の記事では、更新時にスクロール位置が勝手に跳ね上がるのを防ぐ「スクロール位置の維持(085. Preserving Scroll)」をご紹介します。