On 02/01/2010 06:56 PM, Stuart wrote:
> My use case:
> 
> I have a TextBox which I want to validate onBlur. If validation fails,
> I want to setFocus on it again. Which makes onBlur fire again, hence
> the validation routine runs again (not ideal, in fact, a defect in my
> mind).
> 
> My code:
> == snip ==
> public void onBlur(BlurEvent event) {
>   TextBox tb = (TextBox) event.getSource();
>   try {
>     Long longValue = Long.valueOf(tb.getText());
>   } catch (NumberFormatException e) {
>     // warn the user in the UI
>     // set the focus back on the TextBox
>     tb.setFocus(true);
>   }
> }
> == end snip ==
> 
> The onBlur is running again because FocusWidget does this:
> 
> == snip ==
> public void setFocus(boolean focused) {
>     if (focused) {
>       impl.focus(getElement());
>     } else {
>       impl.blur(getElement());
>     }
>   }
> == end snip ==
> 
> So, when I insert non-digits in my text box, and tab or click into the
> next form element, onBlur fires once. In my catch block, I set the
> focus again, which triggers onBlur again because of how
> FocusWidget.setFocus is implemented.
> 
> This defect prevents me from displaying a message to the user just
> once (ie, with an alert) or setting and clearing a message on fail/
> pass of the validation.
> 
> Anyone have a workaround?
> 

Set a keydown handler on your numeric-only field(s).

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to