8
votes

Google Chrome: la question de la mise au point avec la barre de défilement

J'utilise jQuery 1.3.2.

Il y a un champ d'entrée sous une forme. En cliquant sur le champ de saisie, vous ouvrez une DIV comme liste déroulante. Le div contient une liste d'éléments. Lorsque la taille de la liste est grande, il y a une barre de défilement verticale dans la DIV. text alt

Pour fermer la liste déroulante lorsque vous avez cliqué à l'extérieur, il existe un événement de flou sur le champ de saisie.

Maintenant, le problème est:

Chrome (2.0.172) Lorsque nous cliquons sur la barre de défilement, le champ Entrée va perdre la mise au point. Et maintenant, si vous cliquez à l'extérieur, la liste déroulante ne fermez pas (car l'entrée a déjà perdu la mise au point lorsque vous avez cliqué sur la barre SrollBar)

dans Firefox (3.5), IE (8), Opera (9.64), Safari () Lorsque nous cliquons sur la barre de défilement, le champ de saisie ne perdra pas la mise au point. Par conséquent, lorsque vous cliquez à l'extérieur (après avoir cliqué sur la srollbar), la liste déroulante fermera. C'est le comportement attendu.

Donc, en chrome une fois la barre de défilement cliquée, puis si je clique en dehors de la liste déroulante ne ferme pas. Comment puis-je résoudre ce problème avec Chrome.


0 commentaires

8 Réponses :


0
votes

Pourriez-vous peut-être définir l'événement de flou pour tirer aussi la DIV DIV aussi? De cette façon, lorsque l'entrée ou la liste déroulante perd la mise au point, elle disparaîtra ...


4 commentaires

Merci pour votre réponse. Mais si j'ajoute un événement de flou sur la baisse DIV, la liste déroulante sera fermée lorsque le champ Entrée est cliqué. Que je ne veux pas.


Ensuite, faites un chèque pour voir si ni le champ de saisie ni la liste déroulante ne se concentrent. S'ils sont tous les deux flous, supprimez la liste.


L'événement de clic attaché à la liste déroulante DIV ne tire pas le déclenchement lorsque la barre de défilement dans la liste déroulante est cliquée. Je suppose que la barre de défilement n'est pas considérée comme une partie de la div.


Je ne pense pas que vous puissiez ajouter un événement flou à la div. jsfiddle.net/aamir/gqxeq/1



0
votes

Je suis curieux ...
Vous utilisez la dernière version de chaque navigateur, pourquoi ne pas l'essayer en chrome 4.0.202?


1 commentaires

Chrome 2 est la dernière version stable



1
votes

Plus tôt, j'ai également fait face à une telle situation et c'est ce que j'ai fait. xxx

et sur le champ d'entrée, je ferai ce xxx

donc cela fermera la liste déroulante si elle est cliquée n'importe où en dehors de la DIV (même la barre de défilement). Mais je pensais que si quelqu'un pouvait fournir une solution plus logique.


1 commentaires

J'ai fait la même chose que cela, mais l'a appliqué à l'événement coxout .



5
votes

1 commentaires

En essayant, mais pas sûr de la raison pour laquelle il ne fonctionne pas ici: JSBIN.com/idaroq/edit#javaScript , html, vivre



0
votes

Au lieu de détecter le flou, détectez le document.Body ou Fenêtre cliquez sur le point de la souris. Déterminez si ce point de souris est en dehors de la boîte de menus. Presto, vous avez détecté quand ils ont cliqué devant la boîte!


0 commentaires

0
votes

J'ai résolu ceci en procédant comme suit:

#my_container est le conteneur qui a la règle "Overflow: Auto" CSS Rule P>

        (>> ADDED THIS) mouse_in_container=false;
        $('input').attr('active', false); // to blur input
        $('#my_container').hide();


0 commentaires

1
votes

Je faisais face à la même situation / à la même question et j'ai testé la solution de "iHsoft", mais cela a des problèmes. J'ai donc travaillé sur une alternative pour cela et je n'ai fait qu'une seule fois que "ihsoft" mais celui qui fonctionne. Voici ma solution:

var hide_dropdownlist=true;

search_ctrl.onblur = function() {

  search_has_focus = false
  if (hide_dropdownlist) {
    // hide dropdown
  } else {
    hide_dropdownlist = true;
    search_ctrl.focus();
  }
}

dropdow_wrap.onmouseover = function() {
    hide_dropdownlist=false;
}
dropdow_wrap.onmouseoout = function() {
    hide_dropdownlist=true;
}


0 commentaires

2
votes

Je ne pouvais pas obtenir ces réponses au travail, peut-être parce qu'elles sont à partir de 2009. Je viens de traiter cela, je pense que ihsoft est sur la bonne voie, mais un peu lourds.

avec deux fonctions XXX

Le truc est dans la manière dont vous liez les éléments. L'événement Onmousedown doit être sur le "conteneur" DIV qui contient tout ce qui va être cliqué (c'est-à-dire la zone de texte, la flèche déroulante et la zone déroulante et sa barre de défilement). L'événement de flou (ou en jQuery l'événement de mise au point) doit être lié directement dans la zone de texte.

testé et fonctionne!


0 commentaires