javascript - Elm - 如何在外部点击时关闭模式窗口

标签 javascript elm

这是代码:

modalWindow :
  Lang -> String ->
  Action -> Action ->
  List (Html Action) -> Html Action
modalWindow lang heading accept close inputs =
  let
    cancel = case lang of
      Es -> "Cancelar"
      En -> "Cancel"
    buttons =
      H.div [A.class "flex-center-div"]
        [ H.input
            [ A.class "textarea-editor-modal-button"
            , A.type_ "button"
            , A.value "OK"
            , E.onClick accept
            ] []
        , H.input
            [ A.class "textarea-editor-modal-button"
            , A.type_ "button"
            , A.value cancel
            , E.onClick close
            ] []
        ]
  in
    H.div [A.class "textarea-editor-modal-window", E.onClick close]
      [ H.div [A.class "textarea-editor-modal-content"] <|
          [ H.div [A.class "textarea-editor-modal-title"] [H.text heading] ]
          ++ inputs ++ [buttons]
      ]

问题出在 in 之后的行中,因为即使我单击模态框内部,它也会关闭模态框。

根据https://www.w3schools.com/howto/howto_css_modals.asp我应该使用 event.target 来区分内部部分内部或外部的点击。

最佳答案

您的建议可行,或者您可以将 onMouseDown 事件处理程序添加到内部的第一个 div,并使用始终成功的解码器和 preventDefault = True。唯一的问题是您需要添加 NoOp 消息

mouseDownPreventDefault : msg -> Attribute msg
mouseDownPreventDefault noop =
    onWithOptions "mousedown"
        { stopPropagation = False
        , preventDefault = True
        }
        (Json.Decode.succeed noop)

关于javascript - Elm - 如何在外部点击时关闭模式窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51114136/

相关文章:

javascript - 如何存储信息以正确显示构成单个游戏角色/对象/NPC 的多个图像?

JavaScript for 循环索引奇怪

elm - 如何更新榆树中的内部记录

drop-down-menu - 如何在 Elm lang 中使用选择(下拉)标签

functional-programming - 榆树初学者 : trying to write blackjack

javascript - 单击时获取内容的innerHTML

javascript - 如何根据颜色选择器值 onclick 的值更改元素颜色

javascript - 在 angularjs 中为什么我们在 angular.module() 函数中使用 [] ?

elm - 如何在 Elm 0.18 中的一个函数中触发多条消息?

html - 如何在滚动时创建 Elm Lang 事件?