μ΄ μμλ μ΄λ©μΌ μ£Όμμ μΈλΌμΈ νλ μ ν¨μ± κ²μ¬λ₯Ό μννλ λ°©λ²μ 보μ¬μ€λλ€.
μ΄λ₯Ό μν΄ μ ν¨μ±μ κ²μ¬ν κ°μ μλ²μ POST
νκ³ , κ·Έ κ²°κ³Όλ‘ DOMμ μ
λ°μ΄νΈνλ μ
λ ₯ νλκ° μλ νΌμ λ§λ€μ΄μΌ ν©λλ€.
λ€μκ³Ό κ°μ νΌμΌλ‘ μμν©λλ€:
<h3>Signup Form</h3>
<form hx-post="/contact">
<div hx-target="this" hx-swap="outerHTML">
<label>Email Address</label>
<input name="email" hx-post="/contact/email" hx-indicator="#ind">
<img id="ind" src="/img/bars.svg" class="htmx-indicator"/>
</div>
<div class="form-group">
<label>First Name</label>
<input type="text" class="form-control" name="firstName">
</div>
<div class="form-group">
<label>Last Name</label>
<input type="text" class="form-control" name="lastName">
</div>
<button class="btn primary">Submit</button>
</form>
νΌμ 첫 λ²μ§Έ div
λ μμ²μ νκ²μΌλ‘ μ€μ λμ΄ μμΌλ©°, outerHTML
μ€μ μ λ΅μ΄ μ§μ λμ΄ μμ΄ μλ΅μ μν΄ μμ ν κ΅μ²΄λ©λλ€.
μ
λ ₯ νλλ λ³κ²½ μ΄λ²€νΈκ° λ°μν λ μ ν¨μ± κ²μ¬λ₯Ό μν΄ /contact/email
λ‘ POST
λ₯Ό 보λ΄λλ‘ μ§μ λμ΄ μμ΅λλ€(μ΄κ²μ΄ μ
λ ₯ νλμ κΈ°λ³Έ λμμ
λλ€).
λν, μμ²μ λν μΈλμΌμ΄ν°λ₯Ό μ§μ ν©λλ€.
μμ²μ΄ λ°μνλ©΄, λ°κΉ₯ div
λ₯Ό κ΅μ²΄νλ λΆλΆ μλ΅μ λ°νν©λλ€. κ·Έ μμλ λ€μκ³Ό κ°μ΅λλ€:
<div hx-target="this" hx-swap="outerHTML" class="error">
<label>Email Address</label>
<input name="email" hx-post="/contact/email" hx-indicator="#ind" value="test@foo.com">
<img id="ind" src="/img/bars.svg" class="htmx-indicator"/>
<div class='error-message'>That email is already taken. Please enter another email.</div>
</div>
μ΄ div
λ error
ν΄λμ€λ‘ μ£Όμμ΄ λ¬λ € μμΌλ©°, μ€λ₯ λ©μμ§ μμλ₯Ό ν¬ν¨ν©λλ€.
μ΄ νΌμ λ€μ CSSλ₯Ό μ¬μ©νμ¬ κ°λ¨ν μ€νμΌλ§ν μ μμ΅λλ€:
.error-message {
color:red;
}
.error input {
box-shadow: 0 0 3px #CC0000;
}
.valid input {
box-shadow: 0 0 3px #36cc00;
}
μ΄λ κ² νλ©΄ λ λμ μκ°μ νΌλλ°±μ μ 곡ν μ μμ΅λλ€.
μλλ μ΄ μμμ μλνλ λ°λͺ¨μ
λλ€. μ ν¨ν μ΄λ©μΌλ‘λ test@test.com
λ§ νμ©λ©λλ€.