6
votes

Comment prévenir les événements de mise au point dans IE lorsque MouseDown se produit

événement.preventDefault (); retourner faux; Event.StopPropagation ();

L'un d'entre eux peut empêcher l'événement de mise au point de se produire lorsque je déclenche un événement de MouseDown dans Firefox et Chrome, mais il a échoué dans IE.Dans fait que Chrome a un autre problème. Quand Mousedowning,: Survolez CSS ne fonctionne pas. ` xxx

` Ce que j'attendais, c'est que lorsque je clique sur le sous-div, tel que "Sam", puis $ ("# Nom"). Val ("Sam"). Mais le problème est que lorsque j'appuie sur la souris (juste Mousedown, non publié), le $ ("# nom"). Flou fonctionne immédiatement et suggère que DV devient masquer.


0 commentaires

3 Réponses :


0
votes

Utilisation: actif au lieu de: Survolez pour CSS pour appliquer pendant que le bouton de la souris est en panne.

Je ne pense pas que la prévention de l'événement de flou fera tout ce que vous voulez, car si l'utilisateur clique sur l'entrée, Ensuite, sur la DIV, puis ailleurs sur la page, alors la DIV restera. Je peux penser à quelques options différentes, chacune avec leurs propres pièges. Celui-ci se comportera correctement pendant que l'utilisateur reste dans la page, mais laissera la div montrant si l'utilisateur se déplace si l'utilisateur se déplace dans la barre d'adresse suivante: p> xxx pré>

jsfiddle: http://jsfiddle.net/nbynt/2/ p>

Si vous n'avez pas besoin de supporter IE7, alors vous pouvez le faire en utilisant uniquement CSS (et cela fonctionne exactement comme prévu sur tout navigateur moderne, y compris IE8): p> xxx pré>

Notez que vous devez mettre un tabindex sur La DIV pour la méthode CSS pour fonctionner: p> xxx pré>

jsfiddle: http://jsfiddle.net/nbynt/1/ p>

Enfin, vous pouvez vous tromper sur le côté de la disparition de la divannière en combinant JavaScript avec CSS (cela fonctionne dans IE7): P>

#suggest:hover {
    display: block !important;
}

$("#name").focus(function() {
    $("#suggest").show();
}).blur(function() {
    $("#suggest").hide();
});


0 commentaires

17
votes

Vous pouvez utiliser un attribut "non sélectionnable" pour éviter de perdre la mise au point dans IE et MouseDown Handler pour d'autres.

<input type="text" id="name">

<div onmousedown="return false" unselectable="on" id="suggest">
  <div unselectable="on">mark</div>
  <div unselectable="on">sam</div>
  <div unselectable="on">john</div>
</div>


3 commentaires

GUYS C'est génial que vous semblez être la seule personne du monde qui a remarqué que l'attribut non sélectionnable empêche la cible de MouseDown de voler la mise au point dans IE <9. SIMPLIFICATION: Plutôt que d'ajouter l'attribut à chaque élément, vous pouvez simplement définir la propriété sur MouseDown, par ex. Onmousedown = "Event.Target.unSelectable = true; renvoyer false . Jsbin.com/ Yagekiji / 1


Briliant. Cela a résolu mon problème à la main et merci@nameOutName!


C'est pure or! Fonctionne parfaitement! Surtout la version @han suggère.



0
votes

La meilleure solution que j'ai trouvée au cours de mon enquête est l'appel EventDefault et StopPropagation Fonctions non sur "MouseDown", mais sur "Pointeur" à la place.

ressemble à n'importe quel événement de navigateur "Pointrice" avant l'événement "MouseDown" et empêcher l'événement "PointerDown" évite également la mise au point.


0 commentaires