Обратите внимание: я не смог найти решение, которое могло бы работать здесь, поэтому я использовал порты для того же.
Мне нужно использовать Browser.Events.onKeyDown, для которого я также написал декодер, мне нужно создать несколько ярлыков для моего веб-приложения, поэтому мне нужно предотвратить поведение по умолчанию клавиш Meta (на Mac) и Ctrl (на другие ос)
В моем методе подписки я использую следующее.
Но нет никакого открытого способа использовать предотвращение по умолчанию.
let
decoder : Decode.Decoder Msg
decoder =
keyDecoder
|> Decode.andThen
(\( keyCode, ctrlKey ) ->
case keyCode of
39 ->
Decode.succeed <| ShortCutNext
37 ->
Decode.succeed <| ShortCutPrevious
_ ->
Decode.fail ""
)
in
Sub.batch
[ Browser.Events.onKeyDown decoder]
keyDecoder : Decode.Decoder ( Int, Bool )
keyDecoder =
Decode.map2 (\a -> \b -> ( a, b ))
(Decode.field "keyCode" Decode.int)
(Decode.field "metaKey" Decode.bool)
Примечание. Событие находится на самой странице, а не на каком-либо элементе, например, textarea, поэтому декодер опций "keydown" для Html.Events.custom не применим.