HTMX - 验证



HTMX 验证与 HTML5 验证 API 协同工作,因为如果可验证的输入字段无效,它不会触发表单的任何请求。这在 Ajax 请求和 WebSockets 发送中都以相同的方式工作。它将在验证周围触发事件,这些事件可用于挂钩自定义验证和错误处理。

  • htmx:validation:validate: 用于添加自定义验证逻辑。
  • htmx:validation:failed: 用于指示无效输入。
  • htmx:validation:halted: 用于显示验证错误。

HTMX 验证示例

在以下示例中,hx-on 属性捕获 htmx:validation:validate 事件,并要求输入值“tutorialspoint”。请记住,所有客户端验证都应在服务器端重新执行,因为这始终可以绕过。

<form id="example-form" hx-post="/test">
   <input
      name="example"
      // Reset the validation on keyup
      onkeyup="this.setCustomValidity('')"
      hx-on:htmx:validation:validate="if(this.value != 'tutorialspoint') {
      // Set the validation error
      this.setCustomValidity('Please enter the value tutorialspoint')
      // Report the issue
      htmx.find('#example-form').reportValidity() 
      }"
      />
</form>

如何验证非表单元素?

您可以在 hx-validate 属性上设置 true 值,以在非表单元素发出任何请求之前对其进行验证。表单元素默认在发出任何请求之前进行验证。

非表单元素验证示例

在以下示例中,非表单元素在发出请求之前进行验证。

  • 输入字段具有 required 属性,使其成为必填项。
  • div 元素使用 hx-get 在单击时向 /validate-username 发送 GET 请求。
  • hx-validate="true" 属性确保在发出请求之前验证输入字段。
  • 服务器的响应将显示在 ID 为 result 的 div 中。
<input type="text" id="username" required placeholder="Enter your username" />
<div
   hx-get="/validate-username"
   hx-validate="true"
   hx-trigger="click"
   hx-target="#result"
   >
   Validate Username
</div>
<div id="result"></div>
广告