This is an improvement, but again, trying to validate on every key press 
causes problems. Type a number and you can't delete it with backspace, you 
can't enter a negative number, ctrl-z acts weird. Now, I'm sure you can 
work around all of these problems, but why don't wait until the user has 
finished and then update the model and validate?

On Saturday, 21 January 2017 22:11:56 UTC-3, j weir wrote:
>
> 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 elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to