gpt4 book ai didi

elm - 有条件地在 Elm 中的表单提交上切换 `preventDefault`

转载 作者:行者123 更新时间:2023-12-04 20:33:52 24 4
gpt4 key购买 nike

有没有办法有条件地切换 preventDefault关于表单提交?
我试过使用 onWithOptions , 下面,但似乎只使用了第一个设置,尽管我可以使用 Debug.log 看到它发生了变化,当模型上有名称时。

, onWithOptions
"submit"
(if model.name == "" then
(Debug.log "prevent" { preventDefault = True, stopPropagation = True })
else
(Debug.log "allow" { preventDefault = False, stopPropagation = False })
)
(Json.succeed FormSubmit)

更新了答案的发现

正如@Tosh 所说,隐藏按钮可以解决这个问题:
, button
[ onPreventClickHtml FormSubmit
, Html.Attributes.hidden (model.name == "" |> not) ]
[ text " prevent" ]
, button
[ onClick FormSubmit
, Html.Attributes.hidden (model.name == "") ]
[ text "allow" ]

哪里 onPreventClickHtml是:
onPreventClickHtml : Msg -> Attribute Msg
onPreventClickHtml msg =
onWithOptions
"click"
{ preventDefault = True, stopPropagation = True }
(Json.succeed msg)

有条件地显示按钮 工作:
, (if model.name == "" then
button
[ onPreventClickHtml FormSubmit ]
[ text " prevent" ]
else
button
[ type' "submit", onClick FormSubmit ]
[ text "allow" ]
)

我正在使用 elm-mdl,因此发现实现该解决方案更具挑战性,因为根据我的经验,创建自定义 onclick 需要 elm-mdl 未公开的类型,因此需要复制。
, if model.name == "" then
Material.Options.nop
else
Material.Options.css "visibility" "hidden"
, onPreventClick FormSubmit

, if model.name == "" then
Material.Options.css "visibility" "hidden"
else
Material.Options.nop
, Button.onClick FormSubmit



onPreventClick : Msg -> Property Msg
onPreventClick message =
Material.Options.set
(\options -> { options | onClick = Just (onPreventClickHtml message) })

-- Duplicated from elm-mdl
type alias Property m =
Material.Options.Property (Config m) m

-- Duplicated from elm-mdl
type alias Config m =
{ ripple : Bool
, onClick : Maybe (Attribute m)
, disabled : Bool
, type' : Maybe String
}

另一种适用于我的场景的方法是更改​​按钮类型:
, if model.name == "" then
Button.type' "reset"
else
Button.type' "submit"

最佳答案

一个简单的解决方法建议,直到有人向我们展示如何解决它。

如何创建两个按钮(如您所示具有不同的选项)并根据条件仅显示其中一个?
您可以使用 Html.Attributes.hide为了那个原因。

关于elm - 有条件地在 Elm 中的表单提交上切换 `preventDefault`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39950910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com