在 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,它为您提供 onClickPreventDefault
和 onClickStopPropagation
函数。
如何在 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,它为您提供 onClickPreventDefault
和 onClickStopPropagation
函数。