@@ -4752,20 +4752,21 @@ var htmx = (function() {
47524752 }
47534753
47544754 /**
4755- * Updates the responseInfo's target property if an HX-Retarget header is present
4756- *
4757- * @param {XMLHttpRequest } xhr
4758- * @param {HtmxResponseInfo } responseInfo
4755+ * Resove the Retarget selector and throw if not found
47594756 * @param {Element } elt
4757+ * @param {String } target
4758+ * @returns {Element }
47604759 */
4761- function handleRetargetHeader ( xhr , responseInfo , elt ) {
4762- if ( hasHeader ( xhr , / H X - R e t a r g e t : / i) ) {
4763- if ( xhr . getResponseHeader ( 'HX-Retarget' ) === 'this' ) {
4764- responseInfo . target = elt
4765- } else {
4766- responseInfo . target = asElement ( querySelectorExt ( elt , xhr . getResponseHeader ( 'HX-Retarget' ) ) )
4767- }
4760+ function resolveRetarget ( elt , target ) {
4761+ if ( target === 'this' ) {
4762+ return elt
4763+ }
4764+ const resolvedTarget = asElement ( querySelectorExt ( elt , target ) )
4765+ if ( resolvedTarget == null ) {
4766+ triggerErrorEvent ( elt , 'htmx:targetError' , { target } )
4767+ throw new Error ( `Invalid re-target ${ target } ` )
47684768 }
4769+ return resolvedTarget
47694770 }
47704771
47714772 /**
@@ -4816,9 +4817,6 @@ var htmx = (function() {
48164817 return
48174818 }
48184819
4819- // handle retargeting before determining history updates/resolving response handling
4820- handleRetargetHeader ( xhr , responseInfo , elt )
4821-
48224820 const historyUpdate = determineHistoryUpdates ( elt , responseInfo )
48234821
48244822 const responseHandling = resolveResponseHandling ( xhr )
@@ -4827,15 +4825,17 @@ var htmx = (function() {
48274825 let ignoreTitle = htmx . config . ignoreTitle || responseHandling . ignoreTitle
48284826 let selectOverride = responseHandling . select
48294827 if ( responseHandling . target ) {
4830- responseInfo . target = asElement ( querySelectorExt ( elt , responseHandling . target ) )
4828+ responseInfo . target = resolveRetarget ( elt , responseHandling . target )
48314829 }
48324830 var swapOverride = etc . swapOverride
48334831 if ( swapOverride == null && responseHandling . swapOverride ) {
48344832 swapOverride = responseHandling . swapOverride
48354833 }
48364834
48374835 // response headers override response handling config
4838- handleRetargetHeader ( xhr , responseInfo , elt )
4836+ if ( hasHeader ( xhr , / H X - R e t a r g e t : / i) ) {
4837+ responseInfo . target = resolveRetarget ( elt , xhr . getResponseHeader ( 'HX-Retarget' ) )
4838+ }
48394839
48404840 if ( hasHeader ( xhr , / H X - R e s w a p : / i) ) {
48414841 swapOverride = xhr . getResponseHeader ( 'HX-Reswap' )
0 commit comments