как использовать предотвращение по умолчанию в Elm Browser.Event.onKeyDown - PullRequest
2 голосов
/ 04 июля 2019

Обратите внимание: я не смог найти решение, которое могло бы работать здесь, поэтому я использовал порты для того же.

Мне нужно использовать 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 не применим.

...