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.
The focus
function in the elm-lang/dom package is used to set focus with a Task
(without using any port
s 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