加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

有条件地在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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读