jQuery remettant à la fois le focus et le clic sur un élément

Je suis en train de déterminer les flux de travail pour affiner une entrée de données de l'application web. Image plusieurs formulaires d'adresse sur une seule page web:

  1. Name___________
     Street_________
     Phone__________

  2. Name___________
     Street_________
     Phone__________

  [...many more...]

Maintenant, je voudrais savoir si l'utilisateur est à l'aide de la touche tab pour aller à la deuxième champ "Nom" (ou n'importe où à l'intérieur de cet enregistrement), ou si elles sont à l'aide de la souris, cliquez sur elle. (Ou maj + tab pour vous déplacer dans le sens inverse.)

J'ai mis un gestionnaire à la fois l'accent et cliquez sur le champs de saisie:

$('input').click(function() { TabulateClick(this) });
$('input').focus(function() { TabulateFocus(this) });

Et dans le gestionnaire, je déterminer l'adresse de l'utilisateur est de travailler, et si nous avons "sous tension". (Si l'accent a été mis dans "Téléphone" pour la première adresse, et vous cliquez sur le champ "Nom" dans la même adressece n'est pas réellement de changement, donc je n'ai pas à compiler.)

    function TabulateClick(field)
    {
         var currentAddressRecord = FindAddress(field);
         if ( lastAddressRecord != currentAddressRecord )
             switchedAddressesWithClick++;
         lastAddressRecord = currentAddress;
    }
    function TabulateFocus(field)
    {
         var currentAddress = FindAddress(field);
         if ( lastAddressRecord != currentAddressRecord )
             switchedAddressesWithTab++;
         lastAddressRecord = currentAddress;
    }

Mon problème est que lorsque je clic de souris dans le champ de la focus événement se déclenche d'abord, résumant un faux switchedAddressesWithTab et la modification de la currentAddress (c'est mauvais). Lorsque le click gestionnaire s'exécute, le lastAddressRecord est gâté.

Est-il un chemin à l'intérieur de la focus gestionnaire de savoir qu'il y a une attente click événement sur le même objet? Ou dans le click gestionnaire de savoir qu'il a été précédemment simplement manipulés par focus?

source d'informationauteur Clinton Pierce