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 - XMLHttpRequestdetail.target - リクエストのターゲットdetail.requestConfig - AJAXリクエストの構成htmx:afterProcessNodeこのイベントは、htmx が DOM ノードを初期化した後にトリガーされます。拡張機能がノードに追加機能を追加するのに役立ちます。
detail.elt - リクエストをディスパッチした要素htmx:afterRequestこのイベントは、リクエストが成功した場合(404などのリモートエラーコードを返した場合も含む)またはネットワークエラーが発生した場合に、AJAXリクエストが完了した後にトリガーされます。このイベントは htmx:beforeRequest と組み合わせて、リクエストサイクルをラップできます。
detail.elt - リクエストをディスパッチした要素detail.xhr - XMLHttpRequestdetail.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 - XMLHttpRequestdetail.target - リクエストのターゲットdetail.requestConfig - AJAXリクエストの構成htmx:afterSwapこのイベントは、新しいコンテンツが DOM にスワップされた後にトリガーされます。
detail.elt - リクエストをディスパッチした要素detail.xhr - XMLHttpRequestdetail.target - リクエストのターゲットdetail.requestConfig - AJAXリクエストの構成htmx:beforeCleanupElementこのイベントは、htmx が要素を 無効にする または DOM から削除する前にトリガーされます。
detail.elt - クリーンアップされた要素htmx:beforeOnLoadこのイベントは、レスポンス処理が発生する前にトリガーされます。イベントがキャンセルされた場合、スワップは発生しません。
detail.elt - リクエストをディスパッチした要素detail.xhr - XMLHttpRequestdetail.target - リクエストのターゲットdetail.requestConfig - AJAXリクエストの構成htmx:beforeProcessNodeこのイベントは、htmx が DOM ノードを初期化し、すべての hx- 属性を処理する前にトリガーされます。これにより、拡張機能やその他の外部コードは、DOM ノードが処理される前にその内容を変更できます。
detail.elt - リクエストをディスパッチした要素htmx:beforeRequestこのイベントは、AJAX リクエストが発行される前にトリガーされます。イベントがキャンセルされた場合、リクエストは発生しません。
detail.elt - リクエストをディスパッチした要素detail.xhr - XMLHttpRequestdetail.target - リクエストのターゲットdetail.requestConfig - AJAXリクエストの構成htmx:beforeSendこのイベントは、リクエストが送信される直前にトリガーされます。このイベントでリクエストをキャンセルすることはできません。
detail.elt - リクエストをディスパッチした要素detail.xhr - XMLHttpRequestdetail.target - リクエストのターゲットdetail.requestConfig - AJAXリクエストの構成htmx:beforeSwapこのイベントは、新しいコンテンツが DOM にスワップされる前にトリガーされます。イベントがキャンセルされた場合、スワップは発生しません。
イベント詳細の shouldSwap および target プロパティを変更することで、デフォルトのスワップ動作を変更できます。詳細については、スワップの構成に関するドキュメントを参照してください。
detail.elt - リクエストをディスパッチした要素detail.xhr - XMLHttpRequestdetail.requestConfig - AJAXリクエストの構成detail.shouldSwap - コンテンツがスワップされる場合 (200 以外のレスポンスコードの場合はデフォルトで false)detail.ignoreTitle - true の場合、レスポンス内の title タグは無視されます。detail.target - スワップのターゲットhtmx:beforeTransitionこのイベントは、View Transition ラップされたスワップが発生する前にトリガーされます。イベントがキャンセルされた場合、View Transition は発生せず、代わりに通常のスワップロジックが発生します。
detail.elt - リクエストをディスパッチした要素detail.xhr - XMLHttpRequestdetail.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 に履歴を保存しようとしたときにスローされた Exceptionhtmx:historyCacheMissこのイベントは、履歴を復元するときにキャッシュミスが発生した場合にトリガーされます。
detail.xhr - 復元するリモートコンテンツを取得する XMLHttpRequestdetail.path - 復元されるページのパスとクエリhtmx:historyCacheMissErrorこのイベントは、キャッシュミスが発生し、復元するコンテンツのレスポンスがサーバーから取得されたが、レスポンスがエラーの場合(例: 404)にトリガーされます。
detail.xhr - XMLHttpRequestdetail.path - 復元されるページのパスとクエリhtmx:historyCacheMissLoadこのイベントは、キャッシュミスが発生し、復元するコンテンツのレスポンスがサーバーから正常に取得された場合にトリガーされます。
detail.xhr - XMLHttpRequestdetail.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 - XMLHttpRequestdetail.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 - XMLHttpRequestdetail.target - リクエストのターゲットdetail.requestConfig - AJAXリクエストの構成htmx:pushedIntoHistoryこのイベントは、URLが履歴にプッシュされた後にトリガーされます。
detail.path - 履歴にプッシュされたURLのパスとクエリhtmx:replacedInHistoryこのイベントは、URLが履歴内で置換された後にトリガーされます。
detail.path - 履歴内で置換されたURLのパスとクエリhtmx:responseErrorこのイベントは、HTTPエラーレスポンスが発生した場合にトリガーされます。
detail.xhr - XMLHttpRequestdetail.elt - リクエストをトリガーした要素detail.target - リクエストのターゲットdetail.requestConfig - AJAXリクエストの構成htmx:sendErrorこのイベントは、ネットワークエラーによりHTTPリクエストが発生しなかった場合にトリガーされます。
detail.xhr - XMLHttpRequestdetail.elt - リクエストをトリガーした要素detail.target - リクエストのターゲットdetail.requestConfig - AJAXリクエストの構成htmx:sseErrorこのイベントは、SSEソースでエラーが発生した場合にトリガーされます。
detail.elt - 不正なSSEソースを持つ要素detail.error - エラーdetail.source - SSEソースhtmx:swapErrorこのイベントは、スワップフェーズ中にエラーが発生した場合にトリガーされます。
detail.xhr - XMLHttpRequestdetail.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 - XMLHttpRequestdetail.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 - リクエストをトリガーした要素