2009-01-28 6 views

Répondre

1

Problème: un élément focalisé perd le focus lorsque la barre de défilement IE est utilisée.

Vous aurez besoin de:

  • identifier l'élément qui perd le focus
  • identifier lorsque le document a défilée
  • appliquer à nouveau la mise au point

Vous pouvez identifier le élément qui perd son focus via l'événement blur. Ajoutez un gestionnaire d'événement approprié à chaque élément où vous souhaitez que le focus soit mémorisé. Lorsque le gestionnaire d'événements blur s'exécute, pour un élément d'entrée donné, vous devez stocker, éventuellement dans la variable globale, un identificateur pour l'élément d'entrée. La façon dont vous faites cela dépend de la façon dont vous choisissez d'identifier l'élément. Le id de l'élément serait idéal.

Vous pouvez savoir quand un document est défilé dans le gestionnaire d'événements scroll de l'objet window. Voir https://developer.mozilla.org/en/DOM/window.onscroll.

Vous pouvez savoir quand un document a fini de défiler en comparant les valeurs avant et après de scrollHeight. Voir https://developer.mozilla.org/en/DOM/element.scrollHeight.

générale:

  • ajouter blur gestionnaires d'événements à vos éléments d'entrée
  • sur le flou, notez l'élément qui perd le focus et la scrollHeight actuelle
  • pendant le défilement, comparer scrollHeights pour déterminer si le défilement est arrêté
  • lors du défilement est arrêté, réappliquer la mise au point

Vous pouvez attendre une courte période entre le défilement arrêté et la réapplication de la mise au point. L'utilisateur peut défiler un peu, s'arrêter, défiler, s'arrêter. Vous ne voulez pas que votre script provoque un comportement de saut de focus fou.

+0

Plutôt que de capturer 'blur' sur chaque élément' input', puisqu'il s'agit d'un problème spécifique à IE, voici une solution spécifique à IE: capturez l'événement ['focusout'] (http://msdn.microsoft.com/en-us/library/ms536936 (v = vs.85) .aspx) sur un conteneur des éléments (tel comme le formulaire). Contrairement à 'flou ',' focusout' bulles sur IE, de sorte que vous pouvez non seulement minimiser le nombre de gestionnaires que vous avez besoin de brancher, mais jouez bien avec des formes où vous ajoutez/supprimez des éléments à la volée. –

0

Je pense que vous devez vous poser la question si le navigateur que vous utilisez (et sa version) sont à jour avec les normes d'aujourd'hui ... Par exemple, FF, Safari, Chrome (ou Google Chrome) et mes autres navigateurs «next-gen» ne perdent pas leur focus lors de l'utilisation d'une barre de défilement.

Si vous utilisez, disons, IE4, que d'arrêter d'essayer d'améliorer ses fonctionnalités manquantes. Cependant, je ne sais pas lequel et la version que vous utilisez donc si c'est le dernier IE. Vous pourriez simplement essayer comme Jon Cram déclare.

Vous êtes celui qui devrait savoir si le pourcentage d'utilisateurs du navigateur ne disposant pas des fonctionnalités que vous voulez est assez grand pour vous permettre d'implémenter des changements dans ces navigateurs. Si vous le faites, s'il vous plaît ne vous occupez que de ces fonctionnalités pour les navigateurs qui leur manquent ou vous supprimerez le contrôle des navigateurs qui ont une implémentation suffisante des fonctions «next-gen».

+0

:) Je suis d'accord avec vous, mais le problème n'est toujours pas résolu. Merci – omoto

Questions connexes