I think the problem is that according to the W3C standards, the blur
event is not cancelable: They don't seem to want the programmer to be
able to mess with a blur...

But also, your validation code is a bit buggy anyway: the "ret"
variable is undefined and the regex you use will only catch the cases
where someone pastes in a tab or carriage return value - not if it's
an empty field.

Also also, I think if you call focus inside blur they sort of "fight"
for control of the cursor! It seems to work if you put a slight delay
on the event, like:

function validateFld( fld ){
        return fld.match(/\S/);
}

$( '#fld' ).blur( function(){
        if ( !validateFld( $( this ).val() ) ){
                alert( 'invalid' );
                setTimeout( function(){
                        $( '#fld' ).focus()
                }, 0 );
        }
});

Not particularly attractive, but it works... I'm not sure if there's a
nicer way to do it.

On Sep 10, 9:49 am, jhm <jmay...@gmail.com> wrote:
> I'm having trouble setting the input focus when validating fields in a
> form. I have a very simple case below, that validates a field for
> white space. If it has white space, it triggers an alert and I'd like
> the focus to stay in that field. However, when tabbing, it moves to
> the next field regardless.
>
> I'm using the blur event to validate the field. I'm returning false
> when it has white space. I've even tried forcing the issue by setting
> the focus to the field, and that doesn't work either.
>
> I must be misunderstanding something. Anyone able to set me straight?
>
> TIA
>
> ---- code section  ----
>
> <head>
>
> <script type="text/javascript" src="js/jquery.js"></script>
> <script type="text/javascript">
>
> $(document).ready( function() {
>
>   function validateFld( fld )
>   {
>         var checkWhite = new RegExp(/[\r\n\t ]/);
>
>         return( !checkWhite.test(fld) );
>   }
>
>   $('#fld').blur( function() {
>
>     if ( !validateFld($(this).val()) )
>     {
>       alert('invalid field');
>       ret = false;
>       // $(this).focus();
>     }
>
>     return( ret );
>   });
>
> });
>
> </script>
>
> </head>
>
> <body>
>     <div>
>
>       <h2>Field Test</h2>
>       <input type="text" name="fld" value="" id="fld" /><br />
>       <input type="text" name="fld2" value="" id="fld2" /><br />
>
>     </div>
> </body>
> </html>
>
> ---- code section  ----

Reply via email to