htmxλ hx-confirm
μμ±μ μ§μνμ¬ μ¬μ©μμ μμ
μ νμΈνλ κ°λ¨ν λ©μ»€λμ¦μ μ 곡ν©λλ€.
μ΄ μμ±μ κΈ°λ³Έμ μΌλ‘ μλ°μ€ν¬λ¦½νΈμ confirm()
ν¨μλ₯Ό μ¬μ©νμ§λ§, μ΄λ μ λ’°ν λ§ν κΈ°λ₯μ΄κΈ΄ ν΄λ μ ν리μΌμ΄μ
μ UXμ μΌμΉνμ§ μμ μ μμ΅λλ€.
μ΄ μμ μμλ sweetalert2λ₯Ό μ¬μ©νμ¬ μ¬μ©μ μ μ νμΈ λν μμλ₯Ό ꡬννλ λ°©λ²μ 보μ¬μ€λλ€.
μλμλ ν΄λ¦+컀μ€ν
μ΄λ²€νΈ λ°©λ²μ μ¬μ©νλ μμ μ λ΄μ₯λ hx-confirm
μμ±κ³Ό htmx:confirm
μ΄λ²€νΈλ₯Ό μ¬μ©νλ μμ κ° μμ΅λλ€.
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<button hx-get="/confirmed"
hx-trigger='confirmed'
onClick="Swal.fire({title: 'Confirm', text:'Do you want to continue?'}).then((result)=>{
if(result.isConfirmed){
htmx.trigger(this, 'confirmed');
}
})">
Click Me
</button>
μ¬κΈ°μλ μλ°μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ¬ ν΄λ¦ μ Sweet Alert 2λ₯Ό νμνκ³ μ¬μ©μμ νμΈμ μμ²ν©λλ€.
μ¬μ©μκ° λν μμλ₯Ό νμΈνλ©΄, 컀μ€ν
βconfirmedβ μ΄λ²€νΈλ₯Ό νΈλ¦¬κ±°νμ¬ μμ²μ μ€νν©λλ€. μ΄ μ΄λ²€νΈλ hx-trigger
μ μν΄ ν¬μ°©λ©λλ€.
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script>
document.addEventListener("htmx:confirm", function(e) {
e.preventDefault()
Swal.fire({
title: "Proceed?",
text: `I ask you... ${e.detail.question}`
}).then(function(result) {
if(result.isConfirmed) e.detail.issueRequest(true) // use true to skip window.confirm
})
})
</script>
<button hx-get="/confirmed" hx-confirm="Some confirm text here">
Click Me
</button>
μ΄ λ°©λ²μμλ μλ°μ€ν¬λ¦½νΈλ₯Ό μΆκ°νμ¬ ν΄λ¦ μ Sweet Alert 2λ₯Ό νΈμΆνκ³ νμΈμ μμ²ν©λλ€.
μ¬μ©μκ° λν μμλ₯Ό νμΈνλ©΄ issueRequest
λ©μλλ₯Ό νΈμΆνμ¬ μμ²μ νΈλ¦¬κ±°ν©λλ€. μ΄λ skipConfirmation=true
λ₯Ό μΈμλ‘ μ λ¬νμ¬ window.confirm
μ 건λλ°λλ‘ ν©λλ€.
μ΄ λ°©μμ ν둬ννΈμμ hx-confirm
μ κ°μ μ¬μ©ν μ μκ² νμ¬, μλ₯Ό λ€μ΄ Django 리μ€νΈμ²λΌ μμμ λ°λΌ μ§λ¬Έμ΄ λ¬λΌμ§ λ νΈλ¦¬νκ² μ¬μ©ν μ μμ΅λλ€.
{% for client in clients %}
<button hx-post="/delete/{{client.pk}}" hx-confirm="Delete {{client.name}}??">Delete</button>
{% endfor %}