在 Elm 中使用 preventDefault

Using preventDefault in Elm

如何在 elm 中使用 preventDefault?在键盘事件上说:

keyDown keyCode model =
    case keyCode of

        13 -> -- Enter key
            model

如果我们不想要默认行为?

Html.Events有它的方法,但我不知道如何在实践中使用它。

这个答案在 Elm 0.19 中已经过时

了解如何使用Html.Events.on,然后就变得显而易见了。

myInput =
  input
    [ on "keydown" (Json.map KeyInput keyCode)]
    []
    

变成...

myInputWithOptions =
  input
    [ onWithOptions "keydown" options (Json.map KeyInput keyCode)]
    []

options =
  { stopPropagation = True
  , preventDefault = True
  }

(这里,消息构造函数KeyInput 定义为:type Msg = KeyInput Int)

@Tosh 在他的回答中展示了如何停止事件传播和防止默认行为。

如果您的具体情况是要防止仅在 Enter 上而不是在任何其他键上的默认行为,这在 Elm 中目前是不可能的——您将不得不求助于 Ports 和 JS。

您现在可以为此使用库 elm-community/html-extra,它为您提供 onClickPreventDefaultonClickStopPropagation 函数。