我想听听榆树的keypress
和keydown
事件。但如果我有以下内容,则只会收听keydown
个事件:
textarea
[ onWithOptions "keypress" (Options False True) <| Json.Decode.map KeyPress keyCode
, onWithOptions "keydown" (Options False True) <| Json.Decode.map KeyDown keyCode
] []
如果我将Options
更改为preventDefault
,则会同时收听这两个事件。但是我需要preventDefault
才能不让标签键改变焦点。
任何方式在榆树中做到这一点?
答案 0 :(得分:1)
我建议您使用elm-lang/keyboard。此软件包使用订阅,它非常易于使用。您可以同时订阅keydown和keyup。
针对您的具体情况: keydown事件的默认操作是触发按键事件。如果您阻止该默认行为,您将无法获得按键事件。
您可以阅读有关keydown事件here
的更多信息也许你只需要使用keyup和keydown。
我希望它可以帮到你。
答案 1 :(得分:1)
在Elm 19中,要访问按下的键,可以使用Browser.Events的一部分Elm Browser library。如果您想捕获按下的键,则可以使用以下命令:
import Json.Decode as Decode
type Key
= Character Char
| Control String
subscriptions : Model -> Sub Msg
subscriptions model =
Browser.Events.onKeyDown keyDecoder
keyDecoder : Decode.Decoder Msg
keyDecoder =
Decode.map toKey (Decode.field "key" Decode.string)
toKey : String -> Msg
toKey string =
case String.uncons string of
Just ( char, "" ) ->
PressedLetter char
_ ->
Control string
改编自here。