How to set focus on an element in Elm?

前端 未结 5 1513
暗喜
暗喜 2020-12-14 00:32

How can I set the focus on a Html element in Elm? I tried to set the autofocus attribute on the element and it only sets the focus on the page load.

5条回答
  •  别那么骄傲
    2020-12-14 00:58

    The focus function in the elm-lang/dom package is used to set focus with a Task (without using any ports or JavaScript).

    Internally it uses requestAnimationFrame to ensure any new DOM updates are rendered before it tries to find the DOM node to focus on.

    An example use:

    type Msg
        = FocusOn String
        | FocusResult (Result Dom.Error ())
    
    update : Msg -> Model -> ( Model, Cmd Msg )
    update msg model =
        case msg of
            FocusOn id ->
                ( model, Dom.focus id |> Task.attempt FocusResult )
    
            FocusResult result ->
                -- handle success or failure here
                case result of
                    Err (Dom.NotFound id) ->
                        -- unable to find dom 'id'
                    Ok () ->
                        -- successfully focus the dom
    

    Full example on Ellie

提交回复
热议问题