触发表单字段更改值的更改
Trigger change on value of form field change
我有一个实时查看表单和一个文本输入:
<%= search_input :filter, :search, id: "filter_search_field", class: "input", placeholder: "Search", value: @search_field, "phx-debounce": "300"%>
现在我想以编程方式清除这个字段,我通过更改分配来实现:
{:noreply, assign(socket, :search_field, "")}
问题是分配给表单的 phx-change
事件没有被触发。
我还尝试创建一个 JS 挂钩并从该挂钩更改字段的值,但是这也不会创建事件。
事实证明,更改值不足以触发更改,应该发出 change
事件,在用户输入时触发该事件。可以找到更多信息 here.
现在处理这个问题的方法很少:
- 正在为输入创建挂钩并在输入更改时发出更改事件。这样做的缺点是你会在用户输入时得到重复的事件。
- 将挂钩添加到按钮(在我的例子中,我有一个重置按钮)。从这里您可以手动触发事件。
我最后做的有点不同。 Hooks
有一个名为 pushEvent
的方法,所以我用它来触发 handle_event
:
Hooks.TestHook = {
updated(){
this.pushEvent("filter", {_target: ["filter", "search"], filter: {search: ""}});
}
}
可以找到创建自定义 change
事件的变体 here。
我有一个实时查看表单和一个文本输入:
<%= search_input :filter, :search, id: "filter_search_field", class: "input", placeholder: "Search", value: @search_field, "phx-debounce": "300"%>
现在我想以编程方式清除这个字段,我通过更改分配来实现:
{:noreply, assign(socket, :search_field, "")}
问题是分配给表单的 phx-change
事件没有被触发。
我还尝试创建一个 JS 挂钩并从该挂钩更改字段的值,但是这也不会创建事件。
事实证明,更改值不足以触发更改,应该发出 change
事件,在用户输入时触发该事件。可以找到更多信息 here.
现在处理这个问题的方法很少:
- 正在为输入创建挂钩并在输入更改时发出更改事件。这样做的缺点是你会在用户输入时得到重复的事件。
- 将挂钩添加到按钮(在我的例子中,我有一个重置按钮)。从这里您可以手动触发事件。
我最后做的有点不同。 Hooks
有一个名为 pushEvent
的方法,所以我用它来触发 handle_event
:
Hooks.TestHook = {
updated(){
this.pushEvent("filter", {_target: ["filter", "search"], filter: {search: ""}});
}
}
可以找到创建自定义 change
事件的变体 here。