Even simpler is to just use input [] [type_ "number"] any reasons not to?
http://caniuse.com/#feat=input-number https://gist.github.com/jweir/9e8412a4fa0132866977626e337cb164 On Saturday, January 21, 2017 at 1:37:16 PM UTC-8, j weir wrote: > > You could also format the input so it is always a decimal. > > And instead of using Result.withDefault 0.0, revert to the existing value. > This way the input won't be destroyed if the user fat fingers a non > numeral. > > https://gist.github.com/jweir/9e8412a4fa0132866977626e337cb164 > > > > On Saturday, January 21, 2017 at 9:11:41 AM UTC-8, Rafał Cieślak wrote: >> >> I'd consider storing the whole string in the model and passing it to >> value. This way you can capture whatever input the user types and >> convert it to float only when you actually need to do something with the >> float. >> >> IMHO because the input tag allows you to type any kind of string, you >> should treat the value that comes from its onBlur as a string. You could >> set type_ to "number", but that would still not exclude some invalid >> inputs from being provided. >> >> On Saturday, January 21, 2017 at 4:08:04 PM UTC+1, Simon wrote: >>> >>> I think it is not uncommon to collect dates and float values from users. >>> >>> update ... >>> NewValue v -> >>> { model | floatvalue = String.toFloat v |> Result.withDefault 0.0 } >>> >>> floatInput : Float -> Html Msg >>> floatInput v = >>> input >>> [ onInput NewValue >>> , value (toString v) >>> ] [] >>> >>> The problem with the above is that the moment you type the . toFloat >>> fails and you get a 0 in your model. One way around it could be to >>> delay processing of the value by using onBlur (below), but I was wondering >>> how others handled this. >>> >>> floatInput_ : Float -> Html Msg >>> floatInput_ v = >>> input >>> [ onBlur NewValue >>> , value (toString v) >>> ] [] >>> >>> >>> >> -- You received this message because you are subscribed to the Google Groups "Elm Discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
