实时搜索
此示例在用户输入文本时实时搜索联系人数据库。
我们从搜索输入框和一个空表格开始:
<h3>
Search Contacts
<span class="htmx-indicator">
<img src="/img/bars.svg"/> Searching...
</span>
</h3>
<input class="form-control" type="search"
name="search" placeholder="Begin Typing To Search Users..."
hx-post="/search"
hx-trigger="input changed delay:500ms, keyup[key=='Enter'], load"
hx-target="#search-results"
hx-indicator=".htmx-indicator">
<table class="table">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
</tr>
</thead>
<tbody id="search-results">
</tbody>
</table>
用户输入触发 input 的事件对 /search 发出一个 POST 请求,并将表的主体设置为结果内容。
我们向触发器添加了 delay:500ms 修饰符,以延迟发送查询,直到用户停止输入。此外,我们还向触发器添加了 changed 修饰符,以确保当用户未更改输入值(例如,他们按下箭头键或粘贴相同的值)时,我们不会发送新的查询。
我们可以使用多个触发器并通过用逗号分隔它们,这样我们就可以添加 2 个触发器:
- keyup[key=='Enter'] 一旦按下 Enter 键就会触发。我们在这里使用事件过滤器来检查 KeyboardEvent 对象中的 key 属性。
- load 为了在加载时最初显示所有结果。
最后,当搜索正在进行时,我们会显示一个带有 hx-indicator 属性的进度指示器。