htmx は、動作の変更や拡張に使用できる広範なイベントシステムを提供します。イベントは以下にリストされています。
htmx:abort
このイベントは他のイベントとは異なります。htmx はこのイベントをトリガーするのではなく、リッスンします。
リクエストを作成している要素に htmx:abort
イベントを送信すると、リクエストが中断されます。
<button id="request-button" hx-post="/example">Issue Request</button>
<button onclick="htmx.trigger('#request-button', 'htmx:abort')">Cancel Request</button>
htmx:afterOnLoad
このイベントは、AJAX onload
が完了した後にトリガーされます。これはコンテンツがまだスワップまたは確定されていないことを意味するのではなく、リクエストが完了しただけであることに注意してください。
detail.elt
- リクエストをディスパッチした要素detail.xhr
- XMLHttpRequest
detail.target
- リクエストのターゲットdetail.requestConfig
- AJAXリクエストの構成htmx:afterProcessNode
このイベントは、htmx が DOM ノードを初期化した後にトリガーされます。拡張機能がノードに追加機能を追加するのに役立ちます。
detail.elt
- リクエストをディスパッチした要素htmx:afterRequest
このイベントは、リクエストが成功した場合(404
などのリモートエラーコードを返した場合も含む)またはネットワークエラーが発生した場合に、AJAXリクエストが完了した後にトリガーされます。このイベントは htmx:beforeRequest
と組み合わせて、リクエストサイクルをラップできます。
detail.elt
- リクエストをディスパッチした要素detail.xhr
- XMLHttpRequest
detail.target
- リクエストのターゲットdetail.requestConfig
- AJAXリクエストの構成detail.successful
- レスポンスのステータスコードが 20x であるか、htmx:beforeSwap
イベントで detail.isError = false
とマークされている場合は true、それ以外の場合は falsedetail.failed
- レスポンスのステータスコードが 20x でないか、htmx:beforeSwap
イベントで detail.isError = true
とマークされている場合は true、それ以外の場合は falsehtmx:afterSettle
このイベントは、DOM が 確定 した後にトリガーされます。
detail.elt
- リクエストをディスパッチした要素detail.xhr
- XMLHttpRequest
detail.target
- リクエストのターゲットdetail.requestConfig
- AJAXリクエストの構成htmx:afterSwap
このイベントは、新しいコンテンツが DOM にスワップされた後にトリガーされます。
detail.elt
- リクエストをディスパッチした要素detail.xhr
- XMLHttpRequest
detail.target
- リクエストのターゲットdetail.requestConfig
- AJAXリクエストの構成htmx:beforeCleanupElement
このイベントは、htmx が要素を 無効にする または DOM から削除する前にトリガーされます。
detail.elt
- クリーンアップされた要素htmx:beforeOnLoad
このイベントは、レスポンス処理が発生する前にトリガーされます。イベントがキャンセルされた場合、スワップは発生しません。
detail.elt
- リクエストをディスパッチした要素detail.xhr
- XMLHttpRequest
detail.target
- リクエストのターゲットdetail.requestConfig
- AJAXリクエストの構成htmx:beforeProcessNode
このイベントは、htmx が DOM ノードを初期化し、すべての hx-
属性を処理する前にトリガーされます。これにより、拡張機能やその他の外部コードは、DOM ノードが処理される前にその内容を変更できます。
detail.elt
- リクエストをディスパッチした要素htmx:beforeRequest
このイベントは、AJAX リクエストが発行される前にトリガーされます。イベントがキャンセルされた場合、リクエストは発生しません。
detail.elt
- リクエストをディスパッチした要素detail.xhr
- XMLHttpRequest
detail.target
- リクエストのターゲットdetail.requestConfig
- AJAXリクエストの構成htmx:beforeSend
このイベントは、リクエストが送信される直前にトリガーされます。このイベントでリクエストをキャンセルすることはできません。
detail.elt
- リクエストをディスパッチした要素detail.xhr
- XMLHttpRequest
detail.target
- リクエストのターゲットdetail.requestConfig
- AJAXリクエストの構成htmx:beforeSwap
このイベントは、新しいコンテンツが DOM にスワップされる前にトリガーされます。イベントがキャンセルされた場合、スワップは発生しません。
イベント詳細の shouldSwap
および target
プロパティを変更することで、デフォルトのスワップ動作を変更できます。詳細については、スワップの構成に関するドキュメントを参照してください。
detail.elt
- リクエストをディスパッチした要素detail.xhr
- XMLHttpRequest
detail.requestConfig
- AJAXリクエストの構成detail.shouldSwap
- コンテンツがスワップされる場合 (200 以外のレスポンスコードの場合はデフォルトで false
)detail.ignoreTitle
- true
の場合、レスポンス内の title タグは無視されます。detail.target
- スワップのターゲットhtmx:beforeTransition
このイベントは、View Transition ラップされたスワップが発生する前にトリガーされます。イベントがキャンセルされた場合、View Transition は発生せず、代わりに通常のスワップロジックが発生します。
detail.elt
- リクエストをディスパッチした要素detail.xhr
- XMLHttpRequest
detail.requestConfig
- AJAXリクエストの構成detail.shouldSwap
- コンテンツがスワップされる場合 (200 以外のレスポンスコードの場合はデフォルトで false
)detail.target
- スワップのターゲットhtmx:configRequest
このイベントは、htmx がリクエストに含めるパラメータを収集した後にトリガーされます。これは、htmx が送信するパラメータを含めるか更新するために使用できます。
document.body.addEventListener('htmx:configRequest', function(evt) {
evt.detail.parameters['auth_token'] = getAuthToken(); // add a new parameter into the mix
});
入力値が複数回出現する場合、parameters
オブジェクトの値は単一の値ではなく配列になることに注意してください。
detail.parameters
- リクエストで送信されるパラメータdetail.unfilteredParameters
- hx-select
でフィルタリングする前に見つかったパラメータdetail.headers
- リクエストヘッダーdetail.elt
- リクエストをトリガーした要素detail.target
- リクエストのターゲットdetail.verb
- 使用中の HTTP 動詞htmx:confirm
このイベントは、リクエストのすべてのトリガーで発生します(hx-confirm 属性を持つ要素だけでなく)。これにより、AJAX リクエストの発行をキャンセル (または遅延) することができます。イベントで preventDefault()
を呼び出すと、指定されたリクエストは発行されません。detail
オブジェクトには、後で実際の AJAX リクエストを発行するために使用できる関数 evt.detail.issueRequest(skipConfirmation=false)
が含まれています。これら 2 つの機能を組み合わせることで、非同期確認ダイアログを作成できます。
デフォルトの動作を変更せずに htmx:confirm
イベントの基本的な使用方法を示す基本的な例を次に示します。
document.body.addEventListener('htmx:confirm', function(evt) {
// 0. To modify the behavior only for elements with the hx-confirm attribute,
// check if evt.detail.target.hasAttribute('hx-confirm')
// 1. Prevent the default behavior (this will prevent the request from being issued)
evt.preventDefault();
// 2. Do your own logic here
console.log(evt.detail)
// 3. Manually issue the request when you are ready
evt.detail.issueRequest(); // or evt.detail.issueRequest(true) to skip the built-in window.confirm()
});
また、confirm-with-sweet-alert="{question}"
属性を持つ要素で sweet alert を使用した例を次に示します。
document.body.addEventListener('htmx:confirm', function(evt) {
// 1. The requirement to show the sweet alert is that the element has a confirm-with-sweet-alert
// attribute on it, if it doesn't we can return early and let the default behavior happen
if (!evt.detail.target.hasAttribute('confirm-with-sweet-alert')) return
// 2. Get the question from the attribute
const question = evt.detail.target.getAttribute('confirm-with-sweet-alert');
// 3. Prevent the default behavior (this will prevent the request from being issued)
evt.preventDefault();
// 4. Show the sweet alert
swal({
title: "Are you sure?",
text: question || "Are you sure you want to continue?",
icon: "warning",
buttons: true,
dangerMode: true,
}).then((confirmed) => {
if (confirmed) {
// 5. If the user confirms, we can manually issue the request
evt.detail.issueRequest(true); // true to skip the built-in window.confirm()
}
});
});
detail.elt
- 問題の要素detail.etc
- 追加のリクエスト情報 (ほとんど使用されない)detail.issueRequest(skipConfirmation=false)
- リクエストを発行するために呼び出すことができる関数 (evt.preventDefault()
とペアにする必要があります!)、skipConfirmation が true
の場合、元の window.confirm()
は実行されません。detail.path
- リクエストのパスdetail.target
- リクエストをトリガーした要素detail.triggeringEvent
- このリクエストをトリガーした元のイベントdetail.verb
- リクエストの動詞 (例: GET
)detail.question
- hx-confirm
属性に渡された質問 (hx-confirm
属性が存在する場合のみ使用可能)htmx:historyCacheError
このイベントは、キャッシュを localStorage
に保存する試行が失敗したときにトリガーされます。
detail.cause
- localStorage
に履歴を保存しようとしたときにスローされた Exception
htmx:historyCacheMiss
このイベントは、履歴を復元するときにキャッシュミスが発生した場合にトリガーされます。
detail.xhr
- 復元するリモートコンテンツを取得する XMLHttpRequest
detail.path
- 復元されるページのパスとクエリhtmx:historyCacheMissError
このイベントは、キャッシュミスが発生し、復元するコンテンツのレスポンスがサーバーから取得されたが、レスポンスがエラーの場合(例: 404
)にトリガーされます。
detail.xhr
- XMLHttpRequest
detail.path
- 復元されるページのパスとクエリhtmx:historyCacheMissLoad
このイベントは、キャッシュミスが発生し、復元するコンテンツのレスポンスがサーバーから正常に取得された場合にトリガーされます。
detail.xhr
- XMLHttpRequest
detail.path
- 復元されるページのパスとクエリhtmx:historyRestore
このイベントは、htmxが履歴復元アクションを処理するときにトリガーされます。
detail.path
- 復元されるページのパスとクエリhtmx:beforeHistorySave
このイベントは、コンテンツが履歴APIに保存される前にトリガーされます。
detail.path
- 復元されるページのパスとクエリdetail.historyElt
- 復元される履歴要素detail.config
- EventSource
コンストラクタに渡される設定htmx:load
このイベントは、htmxによって新しいノードがDOMにロードされたときにトリガーされます。
detail.elt
- 新しく追加された要素htmx:noSSESourceError
このイベントは、要素のトリガーがSSEイベントを参照しているが、親のSSEソースが定義されていない場合にトリガーされます。
detail.elt
- 不正なSSEトリガーを持つ要素htmx:oobAfterSwap
このイベントは、帯域外スワップの一部としてトリガーされ、after swap eventと同じように動作します。
detail.elt
- リクエストをディスパッチした要素detail.shouldSwap
- コンテンツがスワップされるかどうか(デフォルトはtrue
)detail.target
- スワップのターゲットdetail.fragment
- レスポンスフラグメントhtmx:oobBeforeSwap
このイベントは、帯域外スワップの一部としてトリガーされ、before swap eventと同じように動作します。
detail.elt
- リクエストをディスパッチした要素detail.shouldSwap
- コンテンツがスワップされるかどうか(デフォルトはtrue
)detail.target
- スワップのターゲットdetail.fragment
- レスポンスフラグメントhtmx:oobErrorNoTarget
このイベントは、帯域外スワップで、対応する要素がDOM内に存在しない場合にトリガーされます。
detail.content
- 不正なoob id
を持つ要素htmx:onLoadError
このイベントは、AJAX呼び出しのload
処理中にエラーが発生した場合にトリガーされます。
detail.xhr
- XMLHttpRequest
detail.elt
- リクエストをトリガーした要素detail.target
- リクエストのターゲットdetail.exception
- 発生した例外detail.requestConfig
- AJAXリクエストの構成htmx:prompt
このイベントは、hx-prompt
属性によってユーザーにプロンプトが表示された後にトリガーされます。このイベントがキャンセルされた場合、AJAXリクエストは発生しません。
detail.elt
- リクエストをトリガーした要素detail.target
- リクエストのターゲットdetail.prompt
- プロンプトに対するユーザーの応答htmx:beforeHistoryUpdate
このイベントは、履歴の更新が実行される前にトリガーされます。履歴の更新に使用されるpath
またはtype
を変更するために使用できます。
detail.history
- 履歴更新のためのpath
とtype
(push、replace)detail.elt
- リクエストをディスパッチした要素detail.xhr
- XMLHttpRequest
detail.target
- リクエストのターゲットdetail.requestConfig
- AJAXリクエストの構成htmx:pushedIntoHistory
このイベントは、URLが履歴にプッシュされた後にトリガーされます。
detail.path
- 履歴にプッシュされたURLのパスとクエリhtmx:replacedInHistory
このイベントは、URLが履歴内で置換された後にトリガーされます。
detail.path
- 履歴内で置換されたURLのパスとクエリhtmx:responseError
このイベントは、HTTPエラーレスポンスが発生した場合にトリガーされます。
detail.xhr
- XMLHttpRequest
detail.elt
- リクエストをトリガーした要素detail.target
- リクエストのターゲットdetail.requestConfig
- AJAXリクエストの構成htmx:sendError
このイベントは、ネットワークエラーによりHTTPリクエストが発生しなかった場合にトリガーされます。
detail.xhr
- XMLHttpRequest
detail.elt
- リクエストをトリガーした要素detail.target
- リクエストのターゲットdetail.requestConfig
- AJAXリクエストの構成htmx:sseError
このイベントは、SSEソースでエラーが発生した場合にトリガーされます。
detail.elt
- 不正なSSEソースを持つ要素detail.error
- エラーdetail.source
- SSEソースhtmx:swapError
このイベントは、スワップフェーズ中にエラーが発生した場合にトリガーされます。
detail.xhr
- XMLHttpRequest
detail.elt
- リクエストをトリガーした要素detail.target
- リクエストのターゲットdetail.requestConfig
- AJAXリクエストの構成htmx:targetError
このイベントは、hx-target
属性に不正なセレクターが使用された場合(例:前に#
がない要素ID)にトリガーされます。
detail.elt
- リクエストをトリガーした要素detail.target
- 不正なCSSセレクターhtmx:timeout
このイベントは、リクエストタイムアウトが発生した場合にトリガーされます。これは、XMLHttpRequestの一般的なtimeout
イベントをラップします。
タイムアウト時間は、htmx.config.timeout
を使用するか、hx-request
を使用して要素ごとに設定できます。
detail.elt
- リクエストをディスパッチした要素detail.xhr
- XMLHttpRequest
detail.target
- リクエストのターゲットdetail.requestConfig
- AJAXリクエストの構成htmx:trigger
このイベントは、AJAXリクエストが指定されていない場合でも、AJAXリクエストが発生するたびにトリガーされます。これは主に、hx-trigger
がクライアントサイドスクリプトを実行できるようにすることを目的としています。AJAXリクエストには、htmx:beforeRequest
やhtmx:afterRequest
など、より細かいイベントが用意されています。
detail.elt
- リクエストをトリガーした要素htmx:validateUrl
このイベントは、リクエストが送信される前にトリガーされ、htmxがリクエストするURLを検証できます。イベントでpreventDefault()
が呼び出された場合、リクエストは送信されません。
document.body.addEventListener('htmx:validateUrl', function (evt) {
// only allow requests to the current server as well as myserver.com
if (!evt.detail.sameHost && evt.detail.url.hostname !== "myserver.com") {
evt.preventDefault();
}
});
detail.elt
- リクエストをトリガーした要素detail.url
- リクエストが送信されるURLを表すURLオブジェクト。detail.sameHost
- リクエストがドキュメントと同じホスト宛の場合、true
になります。htmx:validation:validate
このイベントは、要素が検証される前にトリガーされます。カスタム検証ルールを実装するために、elt.setCustomValidity()
メソッドで使用できます。
<form hx-post="/test">
<input _="on htmx:validation:validate
if my.value != 'foo'
call me.setCustomValidity('Please enter the value foo')
else
call me.setCustomValidity('')"
name="example">
</form>
detail.elt
- リクエストをトリガーした要素htmx:validation:failed
このイベントは、要素の検証に失敗した場合にトリガーされます。
detail.elt
- リクエストをトリガーした要素detail.message
- 検証エラーメッセージdetail.validity
- 検証が失敗した方法を指定するプロパティを含む有効性オブジェクトhtmx:validation:halted
このイベントは、検証エラーによりリクエストが停止した場合にトリガーされます。
detail.elt
- リクエストをトリガーした要素detail.errors
- 無効な要素とそれに関連付けられたエラーを含むエラーオブジェクトの配列htmx:xhr:abort
このイベントは、ajaxリクエストが中止された場合にトリガーされます
detail.elt
- リクエストをトリガーした要素htmx:xhr:loadstart
このイベントは、ajaxリクエストが開始されたときにトリガーされます
detail.elt
- リクエストをトリガーした要素htmx:xhr:loadend
このイベントは、ajaxリクエストが完了したときにトリガーされます
detail.elt
- リクエストをトリガーした要素htmx:xhr:progress
このイベントは、プログレスをサポートするajaxリクエストが実行中の場合に定期的にトリガーされます
detail.elt
- リクエストをトリガーした要素