hx-trigger

hx-trigger 属性を使用すると、AJAX リクエストのトリガーを指定できます。トリガー値は以下のいずれかになります。

標準イベント

click のような標準イベントは、以下のようにトリガーとして指定できます。

<div hx-get="/clicked" hx-trigger="click">Click Me</div>

標準イベントフィルター

イベントは、イベント名の後に角括弧で囲んだブール値の JavaScript 式でフィルタリングできます。この式が true と評価された場合、イベントはトリガーされます。そうでない場合は無視されます。標準イベントフィルターは eval を必要とします

<div hx-get="/clicked" hx-trigger="click[ctrlKey]">Control Click Me</div>

このイベントは、event.ctrlKey プロパティが true に設定されている状態で click イベントがトリガーされた場合にトリガーされます。

条件は、グローバル関数または状態を参照することもできます。

<div hx-get="/clicked" hx-trigger="click[checkGlobalState()]">Control Click Me</div>

また、標準の JavaScript 構文を使用して組み合わせることもできます。

<div hx-get="/clicked" hx-trigger="click[ctrlKey&&shiftKey]">Control-Shift Click Me</div>

式で使用されるすべてのシンボルは、最初にトリガーイベントに対して解決され、次にグローバル名前空間に対して解決されることに注意してください。そのため、myEvent[foo] は、最初にイベントで foo という名前のプロパティを探し、次に foo という名前のグローバルシンボルを探します。

標準イベント修飾子

標準イベントには、動作を変更する修飾子を付けることもできます。修飾子は次のとおりです。

keyup で検索を実行する検索ボックスの例を次に示します。ただし、検索値が変更され、ユーザーが 1 秒間何も入力していない場合に限ります。

<input name="q"
       hx-get="/search" hx-trigger="keyup changed delay:1s"
       hx-target="#search-results"/>

/search URL からのレスポンスは、ID が search-resultsdiv に追加されます。

非標準イベント

htmx がサポートする追加の非標準イベントがいくつかあります。

HX-Trigger ヘッダーによるトリガー

HX-Trigger レスポンスヘッダーからイベントを発生させようとしている場合は、from:body 修飾子を使用する必要があります。たとえば、HX-Trigger: my-custom-event のようなヘッダーをレスポンスで送信する場合、要素は発生させるために次のようにする必要があります。

  <div hx-get="/example" hx-trigger="my-custom-event from:body">
    Triggered by HX-Trigger header...
  </div>

これは、ヘッダーが、トリガーする要素とは異なる DOM 階層でイベントをトリガーする可能性があるためです。同様の理由で、多くの場合、body からホットキーをリッスンします。

ポーリング

every <タイミング宣言> 構文を使用すると、要素を定期的にポーリングできます。

<div hx-get="/latest_updates" hx-trigger="every 1s">
  Nothing Yet!
</div>

この例では、1 秒ごとに /latest_updates URL に GET を発行し、結果をこの div の innerHTML にスワップします。

ポーリングにフィルターを追加する場合は、ポーリング宣言の *後* に追加する必要があります。

<div hx-get="/latest_updates" hx-trigger="every 1s [someConditional]">
  Nothing Yet!
</div>

複数のトリガー

カンマで区切って複数のトリガーを指定できます。各トリガーには独自のオプションがあります。

  <div hx-get="/news" hx-trigger="load, click delay:1s"></div>

この例では、ページの読み込み時にすぐに /news が読み込まれ、クリックするたびに 1 秒の遅延で再び読み込まれます。

JavaScript 経由

AJAX リクエストは、JavaScript の htmx.trigger() を介してトリガーすることもできます。

注意事項