Events

HtmxλŠ” λ™μž‘μ„ μˆ˜μ •ν•˜κ³  κ°œμ„ ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” κ΄‘λ²”μœ„ν•œ 이벀트 μ‹œμŠ€ν…œμ„ μ œκ³΅ν•©λ‹ˆλ‹€. μ΄λ²€νŠΈλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

#Event - 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>

#Event - htmx:afterOnLoad

이 μ΄λ²€νŠΈλŠ” AJAX onloadκ°€ μ™„λ£Œλœ 후에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. μ΄λŠ” μ½˜ν…μΈ κ°€ 아직 κ΅μ²΄λ˜κ±°λ‚˜ μ •λ¦¬λ˜μ—ˆμŒμ„ μ˜λ―Έν•˜λŠ” 것이 μ•„λ‹ˆλΌ μš”μ²­μ΄ μ™„λ£Œλ˜μ—ˆμŒμ„ μ˜λ―Έν•œλ‹€λŠ” 점에 μœ μ˜ν•˜μ„Έμš”.

#Details

#Event - htmx:afterProcessNode

이 μ΄λ²€νŠΈλŠ” htmxκ°€ DOM λ…Έλ“œλ₯Ό μ΄ˆκΈ°ν™”ν•œ 후에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. ν™•μž₯ ν”„λ‘œκ·Έλž¨μ΄ λ…Έλ“œμ— μΆ”κ°€ κΈ°λŠ₯을 λΉŒλ“œν•˜λ € ν•  λ•Œ μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

#Details

#Event - htmx:afterRequest

이 μ΄λ²€νŠΈλŠ” μš”μ²­μ΄ μ„±κ³΅ν•œ 경우(404와 같은 원격 였λ₯˜ μ½”λ“œλ₯Ό λ°˜ν™˜ν–ˆμ„ 수 있음) λ˜λŠ” λ„€νŠΈμ›Œν¬ 였λ₯˜ μƒν™©μ—μ„œ AJAX μš”μ²­μ΄ μ™„λ£Œλœ 후에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. 이 μ΄λ²€νŠΈλŠ” μš”μ²­ 주기에 따라 λ™μž‘μ„ wrapν•˜κΈ° μœ„ν•΄ htmx:beforeRequest와 ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

#Details

#Event - htmx:afterSettle

이 μ΄λ²€νŠΈλŠ” DOM이 μ •λ¦¬λœ 후에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:afterSwap

이 μ΄λ²€νŠΈλŠ” DOMμ•ˆμ—μ„œ ꡐ체가 μΌμ–΄λ‚œ 후에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:beforeCleanupElement

이 μ΄λ²€νŠΈλŠ” htmxκ°€ μš”μ†Œλ₯Ό λΉ„ν™œμ„±ν™”ν•˜κ±°λ‚˜ DOMμ—μ„œ μ œκ±°ν•˜κΈ° 전에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:beforeOnLoad

이 μ΄λ²€νŠΈλŠ” 응닡 μ²˜λ¦¬κ°€ λ°œμƒν•˜κΈ° 전에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. μ΄λ²€νŠΈκ°€ μ·¨μ†Œλ˜λ©΄ ꡐ체가 λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

#Details

#Event - htmx:beforeProcessNode

이 μ΄λ²€νŠΈλŠ” htmxκ°€ DOM λ…Έλ“œλ₯Ό μ΄ˆκΈ°ν™”ν•˜κ³  λͺ¨λ“  hx- 속성을 μ²˜λ¦¬ν•˜κΈ° 전에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. 이λ₯Ό 톡해 ν™•μž₯ ν”„λ‘œκ·Έλž¨ 및 기타 μ™ΈλΆ€ μ½”λ“œκ°€ 처리되기 전에 DOM λ…Έλ“œμ˜ λ‚΄μš©μ„ μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

#Details

#Event - htmx:beforeRequest

이 μ΄λ²€νŠΈλŠ” AJAX μš”μ²­μ΄ 보내지기 전에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. μ΄λ²€νŠΈκ°€ μ·¨μ†Œλ˜λ©΄ μš”μ²­μ΄ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

#Details

#Event - htmx:beforeSend

이 μ΄λ²€νŠΈλŠ” μš”μ²­μ΄ μ „μ†‘λ˜κΈ° 직전에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. 이 μ΄λ²€νŠΈκ°€ λ°œμƒν•˜λ©΄ μš”μ²­μ„ μ·¨μ†Œν•  수 μ—†μŠ΅λ‹ˆλ‹€.

#Details

#Event - htmx:beforeSwap

이 μ΄λ²€νŠΈλŠ” μƒˆ μ½˜ν…μΈ κ°€ DOM μ•ˆμ—μ„œ ꡐ체가 이루지기 전에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. μ΄λ²€νŠΈκ°€ μ·¨μ†Œλ˜λ©΄ ꡐ체가 λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이벀트 μ„ΈλΆ€μ •λ³΄μ˜ shouldSwap 및 target propertyλ₯Ό μˆ˜μ •ν•˜μ—¬ κΈ°λ³Έ ꡐ체 λ™μž‘μ„ μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ ꡐ체 μž‘μ—… ꡬ성에 λŒ€ν•œ λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

#Details

#Event - htmx:beforeTransition

이 μ΄λ²€νŠΈλŠ” View Transition으둜 wrap된 ꡐ체가 λ°œμƒν•˜κΈ° 전에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. μ΄λ²€νŠΈκ°€ μ·¨μ†Œλ˜λ©΄ View Transition이 λ°œμƒν•˜μ§€ μ•Šκ³  λŒ€μ‹  일반 ꡐ체 둜직이 λ°œμƒν•©λ‹ˆλ‹€.

#Details

#Event - htmx:configRequest

이 μ΄λ²€νŠΈλŠ” htmxκ°€ μš”μ²­μ— 포함할 λ§€κ°œλ³€μˆ˜λ₯Ό μˆ˜μ§‘ν•œ 후에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. 이 μ΄λ²€νŠΈλŠ” htmxκ°€ 전솑할 맀개 λ³€μˆ˜λ₯Ό ν¬ν•¨ν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

document.body.addEventListener('htmx:configRequest', function(evt) {
    evt.detail.parameters['auth_token'] = getAuthToken(); // μƒˆ λ§€κ°œλ³€μˆ˜ μΆ”κ°€
});

μž…λ ₯ 값이 두 번 이상 ν‘œμ‹œλ˜λŠ” 경우 parameters 객체의 값은 단일 값이 μ•„λ‹Œ 배열이 λ©λ‹ˆλ‹€.

#Details

#Event - htmx:confirm

이 μ΄λ²€νŠΈλŠ” μš”μ†Œμ—μ„œ νŠΈλ¦¬κ±°κ°€ λ°œμƒν•œ 직후에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. 이λ₯Ό 톡해 AJAX μš”μ²­μ„ μ·¨μ†Œ(λ˜λŠ” 지연)ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ²€νŠΈμ—μ„œ preventDefault()λ₯Ό ν˜ΈμΆœν•˜λ©΄ μ§€μ •λœ μš”μ²­μ„ 보내지 μ•ŠμŠ΅λ‹ˆλ‹€. detail κ°μ²΄μ—λŠ” λ‚˜μ€‘μ— μ‹€μ œ AJAX μš”μ²­μ„ λ°œν–‰ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” ν•¨μˆ˜μΈ evt.detail.issueRequest()κ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 이 두 κΈ°λŠ₯을 κ²°ν•©ν•˜λ©΄ 비동기 confirmation λŒ€ν™” μƒμžλ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ confirm-with-sweet-alert='true' 속성이 μžˆλŠ” λͺ¨λ“  μš”μ†Œμ— sweet alertλ₯Ό μ‚¬μš©ν•˜λŠ” μ˜ˆμ‹œμž…λ‹ˆλ‹€:

document.body.addEventListener('htmx:confirm', function(evt) {
  if (evt.target.matches("[confirm-with-sweet-alert='true']")) {
    evt.preventDefault();
    swal({
      title: "Are you sure?",
      text: "Are you sure you are sure?",
      icon: "warning",
      buttons: true,
      dangerMode: true,
    }).then((confirmed) => {
      if (confirmed) {
        evt.detail.issueRequest();
      }
    });
  }
});
#Details

{target: target, elt: elt, path: path, verb: verb, triggeringEvent: event, etc: etc, issueRequest: issueRequest}

#Event - htmx:historyCacheError

이 μ΄λ²€νŠΈλŠ” localStorage에 μΊμ‹œλ₯Ό μ €μž₯ν•˜λ €λŠ” μ‹œλ„κ°€ μ‹€νŒ¨ν•  λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:historyCacheMiss

이 μ΄λ²€νŠΈλŠ” νžˆμŠ€ν† λ¦¬λ₯Ό λ³΅μ›ν•˜λŠ” λ™μ•ˆ μΊμ‹œ λ―ΈμŠ€κ°€ λ°œμƒν•  λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:historyCacheMissError

이 μ΄λ²€νŠΈλŠ” μΊμ‹œ λ―ΈμŠ€κ°€ λ°œμƒν•˜κ³  볡원을 μœ„ν•œ μ½˜ν…μΈ κ°€ μ„œλ²„μ—μ„œ μ‘λ‹΅λ˜μ—ˆμ§€λ§Œ, 응닡이 였λ₯˜μΈ 경우(예: 404) νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:historyCacheMissLoad

이 μ΄λ²€νŠΈλŠ” μΊμ‹œ λ―ΈμŠ€κ°€ λ°œμƒν•˜κ³  볡원을 μœ„ν•œ μ½˜ν…μΈ κ°€ μ„œλ²„μ—μ„œ μ„±κ³΅μ μœΌλ‘œ μ‘λ‹΅λ˜μ—ˆμ„ λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:historyRestore

이 μ΄λ²€νŠΈλŠ” htmxκ°€ νžˆμŠ€ν† λ¦¬ 볡원 μž‘μ—…μ„ μ²˜λ¦¬ν•  λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:beforeHistorySave

이 μ΄λ²€νŠΈλŠ” htmxκ°€ νžˆμŠ€ν† λ¦¬ 볡원 μž‘μ—…μ„ μ²˜λ¦¬ν•  λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:load

이 μ΄λ²€νŠΈλŠ” htmxκ°€ μƒˆλ‘œμš΄ λ…Έλ“œλ₯Ό DOM에 λ‘œλ“œν•  λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:noSSESourceError

이 μ΄λ²€νŠΈλŠ” μš”μ†Œκ°€ νŠΈλ¦¬κ±°μ—μ„œ SSE 이벀트λ₯Ό μ°Έμ‘°ν•˜μ§€λ§Œ, μƒμœ„ SSE μ†ŒμŠ€κ°€ μ •μ˜λ˜μ§€ μ•Šμ€ 경우 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:oobAfterSwap

이 μ΄λ²€νŠΈλŠ” out of band ꡐ체 μž‘μ—…μ˜ μΌλΆ€λ‘œ 트리거되며 ꡐ체 μž‘μ—… 이후 μ΄λ²€νŠΈμ™€ λ™μΌν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€.

#Details

#Event - htmx:oobBeforeSwap

이 μ΄λ²€νŠΈλŠ” out of band ꡐ체 μž‘μ—…μ˜ μΌλΆ€λ‘œ 트리거되며 ꡐ체 μž‘μ—… 이전 μ΄λ²€νŠΈμ™€ λ™μΌν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€.

#Details

#Event - htmx:oobErrorNoTarget

이 μ΄λ²€νŠΈλŠ” out of band swap이 DOM에 μ „ν™˜ν•  λŒ€μ‘ν•˜λŠ” μš”μ†Œκ°€ 없을 λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:onLoadError

이 μ΄λ²€νŠΈλŠ” AJAX 호좜의 load 처리 쀑에 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:prompt

이 μ΄λ²€νŠΈλŠ” hx-prompt 속성을 μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžμ—κ²Œ ν”„λ‘¬ν”„νŠΈκ°€ ν‘œμ‹œλœ 후에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. 이 μ΄λ²€νŠΈκ°€ μ·¨μ†Œλ˜λ©΄ AJAX μš”μ²­μ΄ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

#Details

#Event - htmx:beforeHistoryUpdate

이 μ΄λ²€νŠΈλŠ” νžˆμŠ€ν† λ¦¬ μ—…λ°μ΄νŠΈκ°€ μˆ˜ν–‰λ˜κΈ° 전에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. νžˆμŠ€ν† λ¦¬ μ—…λ°μ΄νŠΈμ— μ‚¬μš©λ˜λŠ” path λ˜λŠ” type을 μˆ˜μ •ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

#Details

#Event - htmx:pushedIntoHistory

이 μ΄λ²€νŠΈλŠ” URL이 νžˆμŠ€ν† λ¦¬μ— μΆ”κ°€λœ 후에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:replacedInHistory

이 μ΄λ²€νŠΈλŠ” URL이 νžˆμŠ€ν† λ¦¬μ—μ„œ ꡐ체된 후에 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:responseError

이 μ΄λ²€νŠΈλŠ” HTTP 였λ₯˜ 응닡이 λ°œμƒν–ˆμ„ λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:sendError

이 μ΄λ²€νŠΈλŠ” λ„€νŠΈμ›Œν¬ 였λ₯˜λ‘œ 인해 HTTP μš”μ²­μ΄ λ°œμƒν•˜μ§€ λͺ»ν•  λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:sseError

이 μ΄λ²€νŠΈλŠ” SSE μ†ŒμŠ€μ—μ„œ 였λ₯˜κ°€ λ°œμƒν–ˆμ„ λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:swapError

이 μ΄λ²€νŠΈλŠ” ꡐ체 λ‹¨κ³„μ—μ„œ 였λ₯˜κ°€ λ°œμƒν–ˆμ„ λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:targetError

이 μ΄λ²€νŠΈλŠ” hx-target 속성에 잘λͺ»λœ μ„ νƒμž(예: μ•žμ— #κ°€ μ—†λŠ” μš”μ†Œ ID)κ°€ μ‚¬μš©λ  λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:timeout

이 μ΄λ²€νŠΈλŠ” μš”μ²­ μ‹œκ°„ μ΄ˆκ³Όκ°€ λ°œμƒν•˜λ©΄ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. 이 μ΄λ²€νŠΈλŠ” XMLHttpRequest의 일반적인 timeout 이벀트λ₯Ό wrapν•©λ‹ˆλ‹€.

timeout μ‹œκ°„μ€ htmx.config.timeout을 μ‚¬μš©ν•˜μ—¬ μ„€μ •ν•˜κ±°λ‚˜ hx-requestλ₯Ό μ‚¬μš©ν•˜μ—¬ μš”μ†Œλ³„λ‘œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

#Details

#Event - htmx:trigger

이 μ΄λ²€νŠΈλŠ” AJAX μš”μ²­μ΄ μ§€μ •λ˜μ§€ μ•Šμ€ κ²½μš°μ—λ„ AJAX μš”μ²­μ΄ μžˆμ„ λ•Œλ§ˆλ‹€ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€. 이 μ΄λ²€νŠΈλŠ” 주둜 hx-triggerκ°€ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ 슀크립트λ₯Ό μ‹€ν–‰ν•  수 μžˆλ„λ‘ ν•˜κΈ° μœ„ν•œ κ²ƒμœΌλ‘œ, AJAX μš”μ²­μ—λŠ” htmx:beforeRequest λ˜λŠ” htmx:afterRequest와 같은 더 μ„ΈλΆ„ν™”λœ 이벀트λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

#Details

#Event - htmx:validateUrl

이 μ΄λ²€νŠΈλŠ” μš”μ²­μ΄ 이루어지기 전에 νŠΈλ¦¬κ±°λ˜μ–΄ htmxκ°€ μš”μ²­ν•  URL의 μœ νš¨μ„±μ„ 검사할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ²€νŠΈμ—μ„œ preventDefault()κ°€ 호좜되면 μš”μ²­μ΄ 이루어지지 μ•ŠμŠ΅λ‹ˆλ‹€.

document.body.addEventListener('htmx:validateUrl', function (evt) {
  // ν˜„μž¬ μ„œλ²„μ™€ myserver.com에 λŒ€ν•œ μš”μ²­λ§Œ ν—ˆμš©ν•©λ‹ˆλ‹€.
  if (!evt.detail.sameHost && evt.detail.url.hostname !== "myserver.com") {
    evt.preventDefault();
  }
});
#Details

#Event - 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>
#Details

#Event - htmx:validation:failed

이 μ΄λ²€νŠΈλŠ” μš”μ†Œκ°€ μœ νš¨μ„± 검사에 μ‹€νŒ¨ν•  λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:validation:halted

이 μ΄λ²€νŠΈλŠ” μœ νš¨μ„± 검사 였λ₯˜λ‘œ 인해 μš”μ²­μ΄ 쀑단될 λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:xhr:abort

이 μ΄λ²€νŠΈλŠ” ajax μš”μ²­μ΄ 쀑단될 λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:xhr:loadstart

이 μ΄λ²€νŠΈλŠ” ajax μš”μ²­μ΄ μ‹œμž‘λ  λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:xhr:loadend

이 μ΄λ²€νŠΈλŠ” ajax μš”μ²­μ΄ μ™„λ£Œλ  λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details

#Event - htmx:xhr:progress

이 μ΄λ²€νŠΈλŠ” 진행 μƒνƒœλ₯Ό μ§€μ›ν•˜λŠ” ajax μš”μ²­μ΄ 진행 쀑일 λ•Œ 주기적으둜 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€.

#Details