在 Phoenix LiveView 中提交后重置表单输入字段
Reset form input field after submit in Phoenix LiveView
我在 Phoenix LiveView 中有一个带有 phx-submit 绑定的表单。可以通过单击“发送”按钮或在文本字段中按回车键来提交表单。
我的问题是,如果我通过按回车键提交表单,输入字段 不会 被清除,但是如果我通过单击按钮提交,输入字段 IS 已清除。
我希望在这两种情况下都清除输入字段。
下面是我的表格:
<%= f = form_for :chat_form, "#", phx_submit: :send, phx_target: @myself %>
<%= text_input f, :msg, autocomplete: "off" %>
<%= submit "Send" %>
</form>
和我的 handle_event
实现:
def handle_event("send", %{"chat_form" => %{"msg" => msg}}, socket) do
name = socket.assigns.name
Endpoint.broadcast("chat", "new_msg", %{sender: name, text: msg})
{:noreply, socket}
end
我认为您的问题可能与此有关 - https://github.com/phoenixframework/phoenix_live_view/issues/624。基本上Liveview不会修改焦点输入
因此,当您按 Enter 键时,您的注意力集中在文本输入上。
但是当您单击 提交时,您的焦点会更改为让 Liveview 重置文本输入的按钮。
我认为至少有两种解决方案:
- 将
msg
值添加到您的状态,在模板中使用 value: @msg
,并在 handle_event
中重置它(也许我会先尝试)
- 使用线程中建议的 Javascript 挂钩
希望对您有所帮助,希望我也是正确的!
你能删除 phx_target: @myself
吗?如果您使用 link 或按钮向自身发送事件,通常会使用它。如果您有表格,那么 phx_submit
足以完成此过程。
如果您使用上面提到的 value: @msg
方法并将其与表单上的 phi-change
事件相结合,您只需将 @msg
更新为已键入的任何内容,则设置@msg
回到 "" 超出了第一次调用的范围。
我在 Phoenix LiveView 中有一个带有 phx-submit 绑定的表单。可以通过单击“发送”按钮或在文本字段中按回车键来提交表单。
我的问题是,如果我通过按回车键提交表单,输入字段 不会 被清除,但是如果我通过单击按钮提交,输入字段 IS 已清除。
我希望在这两种情况下都清除输入字段。
下面是我的表格:
<%= f = form_for :chat_form, "#", phx_submit: :send, phx_target: @myself %>
<%= text_input f, :msg, autocomplete: "off" %>
<%= submit "Send" %>
</form>
和我的 handle_event
实现:
def handle_event("send", %{"chat_form" => %{"msg" => msg}}, socket) do
name = socket.assigns.name
Endpoint.broadcast("chat", "new_msg", %{sender: name, text: msg})
{:noreply, socket}
end
我认为您的问题可能与此有关 - https://github.com/phoenixframework/phoenix_live_view/issues/624。基本上Liveview不会修改焦点输入
因此,当您按 Enter 键时,您的注意力集中在文本输入上。
但是当您单击 提交时,您的焦点会更改为让 Liveview 重置文本输入的按钮。
我认为至少有两种解决方案:
- 将
msg
值添加到您的状态,在模板中使用value: @msg
,并在handle_event
中重置它(也许我会先尝试) - 使用线程中建议的 Javascript 挂钩
希望对您有所帮助,希望我也是正确的!
你能删除 phx_target: @myself
吗?如果您使用 link 或按钮向自身发送事件,通常会使用它。如果您有表格,那么 phx_submit
足以完成此过程。
如果您使用上面提到的 value: @msg
方法并将其与表单上的 phi-change
事件相结合,您只需将 @msg
更新为已键入的任何内容,则设置@msg
回到 "" 超出了第一次调用的范围。