有条件地在Elm的表单提交上切换`preventDefault`
发布时间:2020-12-14 23:29:05 所属栏目:资源 来源:网络整理
导读:有没有办法在表单提交上有条件地切换preventDefault? 我在下面尝试过使用onWithOptions,但似乎只使用了第一个设置,即使我在模型上有名称时可以看到它使用Debug.log进行更改. ,onWithOptions "submit" (if model.name == "" then (Debug.log "prevent" { pre
有没有办法在表单提交上有条件地切换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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |