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 utilisersetTimeout
mais je voudrais l'éviter et de comprendre le cœur de la question.) - à l'aide de
blur
au lieu defocusOut
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.
- 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.
- 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, pourquoipreventDefault()
n'est pas de travail ici. - jQuery preventDefault() ne fonctionne pas – J'ai essayé quelques solutions possibles à partir de ce fil, comme l'utilisation de
event.stopImmediatePropagation()
etevent.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
Vous devez vous connecter pour publier un commentaire.
Après quelques recherches, j'ai trouvé que seulement certains événements sont "annulable'.
Cité de http://help.dottoro.com/ljwolcsp.php
Chaque événement en Javascript a un annulable propriété qui est défini comme 'vrai' si l'événement peut être évité ou 'false' si l'événement ne peut pas être annulée. Ref: http://help.dottoro.com/ljeosnqv.php
Un exemple de script de http://help.dottoro.com/ljeosnqv.php la démonstration de cette propriété peut être trouvé ici sur jsFiddle (pour économiser de l'espace). Noter les commentaires dans le code sur la façon de Firefox renvoie toujours vrai pour les annulable propriété de l'objet d'événement.
Le principe général étant:
Les événements ont un ordre prédéfini de prédiction, en fonction de la situation. Par exemple, si un bouton de la souris est cliqué sur l'ordre de eventTriggers serait: mousedown, mouseup, et cliquez sur.
Ref: http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-Event-initMouseEvent
Cité de http://www.w3.org/TR/2003/NOTE-DOM-Level-3-Events-20031107/events.html#Events-flow-cancelation
Parfois la séquence des événements que le DOM par défaut action va se produire avant l'événement, vous êtes à la recherche d'annuler l'on voit même, dans ces cas, vous ne pouvez pas annuler l'action par défaut, car elle a déjà eu lieu. C'est-à-dire l'action par défaut se produit avant l'envoi de l'événement.
MA SOLUTION:
Cela dit j'ai réussi à trouver un solution à mon problème et plus/moins de ce problème. En fait, j'ai eu un eventListener avec un élément pour focusin déjà et je voulais cet élément à garder le focus.
J'ai d'abord essayé d'utiliser un setTimeout cas quand j'ai cliqué sur off, mais j'ai trouvé que ce n'était pas bonne, car il a déclenché mon focusin événement. Donc, ce que nous avons besoin est un événement qui est distribué avant le DOM action par défaut du de changement de focus. Je n'ai trouver qu'il y est un événement qui répond à cette exigence, mais n'est disponible que pour IE... typique. Pour votre information c'est: "onbeforedeactivate" et il est annulable. Toutefois, puisque la compatibilité du navigateur est important, il ne faut pas utiliser cette eventTrigger. Plutôt, j'ai trouvé que l'événement mousedown se produit avant que le DOM commence son focus-le changement des comportements.
Donc ce que l'on pourrait faire, c'est:
Il existe de nombreuses autres façons de le faire. Personnellement, je n'aime pas la fixation d'un eventListener à l'ensemble du document, mais aussi pour montrer les principes de base il sert son but.
Note de bas de page:
Un excellent article à lire pour en apprendre plus sur la gestion des événements en Javascript est http://help.dottoro.com/ljtdqwlx.php
Une ressource incroyable, je suis tombé.
Nous savons que c'est la fonction de clic qui cause le problème.
Ainsi, dans le normal explorer comme google chrome, vous pouvez detact l'événement mousedown et puis preventDefault.
Mais cela ne fonctionne pas dans ie, mais nous pouvons utiliser le beforedeactivate événement à la place http://msdn.microsoft.com/en-us/library/windows/apps/jj569321.aspx. Il peut être deteact dans ie lorsque le focus est en train de changer. donc, juste l'empêcher.
code comme ceci:
besoin de voir votre code html. Je ne pense pas que vous appelez les choses correctement, EX:
$.suggestBox
, Je pense, devrait être$(".suggestBox")
, mais je ne peux pas dire sans voir votre htnl