You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Phoenix simple_form的.input字段设置默认值?

解决Phoenix 1.7.6中Simple Form设置默认值的问题

问题原因

直接在.input组件里写value属性不会生效,因为Phoenix的表单字段值由@form结构体中的数据决定,组件会优先使用@form里的值覆盖手动设置的value。

正确设置方式

方式1:初始化表单时传入默认值

在LiveView的mount或handle_params方法中,创建@form时附带默认数据:

def mount(_params, _session, socket) do
  # 注意date格式要符合HTML要求:YYYY-MM-DD
  default_data = %{date: "1982-05-01"}
  form = to_form(default_data)
  {:ok, assign(socket, form: form)}
end

方式2:基于Ecto Schema的表单设置默认值

如果表单绑定Ecto Schema,在changeset中设置默认值:

def changeset(weight, attrs \\ %{}) do
  weight
  |> cast(attrs, [:weight, :date])
  |> validate_required([:weight, :date])
  # 当attrs无date值时,使用默认值
  |> put_change(:date, Map.get(attrs, :date, "1982-05-01"))
end

完成上述设置后,模板中无需保留value属性,保持原有写法即可:

<.input field={@form[:date]} type="date" label="Date" step="any" />

额外提示

HTML的date输入类型要求值必须是YYYY-MM-DD格式,你之前写的01.05.1982不符合规范,即使生效也无法被正确识别。

内容的提问来源于stack exchange,提问作者martins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:52:04