I do not have a strong opinion about this one. What do other people
think?

On Mar 20, 1:15 pm, Kevin Ivarsen <kivar...@gmail.com> wrote:
> Hi all,
>
> I find the default javascript validators for integer, double, and decimal
> SQLFORM fields to be a little annoying. Consider the following surprising
> behaviors:
>
> - You can't navigate within the textbox using the keyboard. Pressing left,
> right, home, or end all result in the cursor jumping back to the end of the
> input
> - You can't select text with ctrl-a or ctrl-shift-left/right
> - If the user accidentally flubs the input (e.g. 2.u1828 instead of
> 2.71828), the offending character is silently removed and an incorrect value
> may be submitted without warning.
>
> I think a better alternative is to flag to the user that the input is wrong
> rather than trying to correct it for them -- e.g. by changing the input
> background color. The following is a sample implementation that does this:
>
> -- in file web2py_ajax.html, replace the lines
> "jQuery('input.integer').live..." and
> "jQuery('input.double,input.decimal').live..." with:
>
>   jQuery('input.integer').live('keydown keyup', function(){
>      if (! this.value.match(/^[+-]?[0-9]*$/)) {
>           jQuery(this).addClass("w2p_inputerror");
>      }
>      else {
>           jQuery(this).removeClass("w2p_inputerror");
>      }
>   });
>
>   jQuery('input.double,input.decimal').live('keydown keyup', function(){
>      if (! this.value.match(/^[+-]?[0-9]*\.?[0-9]*$/)) {
>           jQuery(this).addClass("w2p_inputerror");
>      }
>      else {
>           jQuery(this).removeClass("w2p_inputerror");
>      }
>   });
>
> -- in file base.css, add the following style:
>
>      input.w2p_inputerror {
>           background: #FF8;
>      }
>
> A few notes:
>
> 1. The regexes used to validate numbers are "intentionally" naive. For
> example. the double validator accepts "+", "-", "+.", and "-.", which are of
> couse not valid numbers. However, suppose the user enters a value between -1
> and 0. They are likely to start by typing "-.", and I don't think it's
> polite to flash the textbox at them when they are about to enter a valid
> number.
>
> 2. The double validator does not permit scientific notation - e.g. "1e6" for
> 1 million. Such notation is probably of limited use for most people, the old
> validator rejected such values anyway, and I didn't feel like implementing
> it :-)
>
> 3. The jquery events listen to both keyup and keydown. keyup is necessary
> because the input.value has not yet been updated when keydown is fired. But
> listening to keydown is useful if the user holds down the backspace key -
> the background color will be reset as soon as the last offending character
> has been deleted, rather than waiting for the user to release the backspace
> key.
>
> 4. I used the class name "w2p_inputerror" in an attept to namespace this
> somewhat web2py-specific class.
>
> I hope some people find this to be useful. If other people have been annoyed
> by the current default, perhaps we could open discussion to make this the
> new default in web2py?
>
> Cheers,
> Kevin

Reply via email to