rtfeldman/elm-css/13.1.1

NOTE: this package is not compatible with Elm 0.19.1

Html.Styled.Events

Drop-in replacement for the Html.Events module from the elm-lang/html package.

It is often helpful to create an Union Type so you can have many different kinds of events as seen in the TodoMVC example.

Mouse Helpers

onClick : msg -> Attribute msg
onDoubleClick : msg -> Attribute msg
onMouseDown : msg -> Attribute msg
onMouseUp : msg -> Attribute msg
onMouseEnter : msg -> Attribute msg
onMouseLeave : msg -> Attribute msg
onMouseOver : msg -> Attribute msg
onMouseOut : msg -> Attribute msg

Form Helpers

onInput : (String -> msg) -> Attribute msg

Capture input events for things like text fields or text areas.

It grabs the string value at event.target.value, so it will not work if you need some other type of information. For example, if you want to track inputs on a range slider, make a custom handler with on.

For more details on how onInput works, check out targetValue.

onCheck : (Bool -> msg) -> Attribute msg

Capture change events on checkboxes. It will grab the boolean value from event.target.checked on any input event.

Check out targetChecked for more details on how this works.

onSubmit : msg -> Attribute msg

Capture a submit event with preventDefault in order to prevent the form from changing the page’s location. If you need different behavior, use onWithOptions to create a customized version of onSubmit.

Focus Helpers

onBlur : msg -> Attribute msg
onFocus : msg -> Attribute msg

Custom Event Handlers

on : String -> Decoder msg -> Attribute msg

Create a custom event listener. Normally this will not be necessary, but you have the power! Here is how onClick is defined for example:

import Json.Decode as Json


onClick : msg -> Attribute msg
onClick message =
    on "click" (Json.succeed message)

The first argument is the event name in the same format as with JavaScript's addEventListener function.

The second argument is a JSON decoder. Read more about these here. When an event occurs, the decoder tries to turn the event object into an Elm value. If successful, the value is routed to your update function. In the case of onClick we always just succeed with the given message.

If this is confusing, work through the Elm Architecture Tutorial. It really does help!

onWithOptions : String -> Options -> Decoder msg -> Attribute msg

Same as on but you can set a few options.

type alias Options =
{ stopPropagation : Bool
, preventDefault : Bool
}

Options for an event listener. If stopPropagation is true, it means the event stops traveling through the DOM so it will not trigger any other event listeners. If preventDefault is true, any built-in browser behavior related to the event is prevented. For example, this is used with touch events when you want to treat them as gestures of your own, not as scrolls.

defaultOptions : Options

Everything is False by default.

defaultOptions =
    { stopPropagation = False
    , preventDefault = False
    }

Custom Decoders

targetValue : Decoder String

A Json.Decoder for grabbing event.target.value. We use this to define onInput as follows:

import Json.Decode as Json


onInput : (String -> msg) -> Attribute msg
onInput tagger =
    on "input" (Json.map tagger targetValue)

You probably will never need this, but hopefully it gives some insights into how to make custom event handlers.

targetChecked : Decoder Bool

A Json.Decoder for grabbing event.target.checked. We use this to define onCheck as follows:

import Json.Decode as Json


onCheck : (Bool -> msg) -> Attribute msg
onCheck tagger =
    on "input" (Json.map tagger targetChecked)
keyCode : Decoder Int

A Json.Decoder for grabbing event.keyCode. This helps you define keyboard listeners like this:

import Json.Decode as Json


onKeyUp : (Int -> msg) -> Attribute msg
onKeyUp tagger =
    on "keyup" (Json.map tagger keyCode)

Note: It looks like the spec is moving away from event.keyCode and towards event.key. Once this is supported in more browsers, we may add helpers here for onKeyUp, onKeyDown, onKeyPress, etc.