Est-il possible d'utiliser event.preventDefault avec focusOut? Si non, pourquoi?

Je tiens à prévenir que l'événement par défaut d'un focusOut (ou blur) de l'événement et de garder le focus mis à la spécificité de ce champ de saisie.

C'est ce que j'ai déjà essayé:

  • à l'aide de event.preventDefault() au début et à la fin de la fonction (à des fins de test, pas pour le style)
  • return false; pour éviter la propagation
  • réglage du focus à l'élément directement dans l'élément (mais j'ai trouvé que l'accent est mis commutateurs parce que le commutateur de mise au point est exécuté après la .on() fonction s'exécute. Je sais que je pourrais utiliser setTimeoutmais je voudrais l'éviter et de comprendre le cœur de la question.)
  • à l'aide de blur au lieu de focusOut

Mon code est: est-ce

    _triggerEventHide: function(inst, eventType) {
        inst.$target.on(eventType, function(event) {
            event.preventDefault();
            if (!$.suggestBox.$divCont.hasClass($.suggestBox.mouseOverClassName)) {
                $.suggestBox.$divCont.css({display: 'none'});   //reposition Suggestbox
            } else {
                inst.target.focus(); 
            }
            event.preventDefault();
            return false;
        });
     }

Noter que $target représente le jQuery-enveloppé élément et target représente le natif de l'élément du DOM.

J'ai fait quelques recherches et ai trouvé déjà quelques articles relatifs à ma question, mais aucun d'entre eux de répondre à cette question exacte.

  1. preventDefault ne fonctionne pas sur les événements de focus – Ici, la réponse donnée est un itinéraire alternatif à l'aide de tout type d'événement manipulation.
  2. Focus zone de texte sur l'accent si n'a pas de valeur obligatoire – Là, la solution a été d'utiliser setTimeout() pour définir le focus à l'élément d'origine, ce qui est tout à droite, mais j'aimerais bien comprendre le cœur de la question, pourquoi preventDefault() n'est pas de travail ici.
  3. jQuery preventDefault() ne fonctionne pas – J'ai essayé quelques solutions possibles à partir de ce fil, comme l'utilisation de event.stopImmediatePropagation() et event.stop()mais tout cela pour rien.

J'apprécie tout temps, des connaissances et des solutions (y compris les tentatives) ont contribué à cette affaire. J'aimerais vraiment apprendre...

Ici est un jsFiddle pour vous montrer le problème... n'hésitez pas à jouer avec elle et essayer les différentes solutions.

source d'informationauteur Klik