事件 - htmx:prompt

htmx:prompt 是 HTMX 在你使用 hx-prompt 属性时,用于捕获用户输入值并允许你自定义弹窗行为的事件。

它的主要作用是让你用 JavaScript 自定义提示输入框(替代默认的 window.prompt)。

当你点击带有 hx-prompt="变量名" 的元素时,HTMX 会默认调用 window.prompt(...),但你可以通过监听 htmx:prompt 来替换这个行为。

事件参数

  • detail.elt - 触发请求的元素
  • detail.target - 请求的目标
  • detail.prompt - 用户对提示的响应

示例代码

<button 
  hx-delete="/delete-item" 
  hx-prompt="reason"
  hx-vals='{"itemId": 42}'
  hx-target="#result"
  hx-swap="innerHTML">
  删除项目
</button>

<div id="result"></div>

点击按钮时,HTMX 会弹出默认的 window.prompt("Please enter value for reason:"),然后将用户输入的值作为参数发送:

DELETE /delete-item
Content-Type: application/x-www-form-urlencoded

reason=你输入的理由&itemId=42

自定义弹窗

<script>
  document.body.addEventListener("htmx:prompt", function(event) {
    event.preventDefault(); // 阻止默认 window.prompt

    const variable = event.detail.prompt; // 即 hx-prompt 的值
    console.log("需要为变量收集值:", variable);

    // 用你自己的弹窗逻辑(此处简单写个例子)
    const input = window.confirm("是否确认删除?");
    if (input) {
      event.detail.value = "用户确认删除";  // 设置你想提交的值
    } else {
      event.detail.cancel = true;  // 用户取消
    }
  });
</script>