2010-02-17 6 views
4

J'espère que quelqu'un peut m'aider. Je sais que cela a déjà été discuté here mais l'exemple est prototype et étranger à moi. Je suis à la recherche d'une solution javascript ou jquery stricte. J'ai un exemple de configuration here. Cliquez sur la barre de défilement dans FF et vous n'obtenez pas d'alerte mais cliquez dessus dans IE et vous le faites. S'il vous plaît aidez-moi, merci!L'entrée de formulaire perd le focus sur la barre de défilement cliquez sur IE

+0

FYI Le comportement de Chrome semble être le même que celui d'IE – Emmett

+0

@emmett Je n'arrive pas à reproduire ce problème sur Chrome dans la dernière version, il pourrait avoir changé dans les versions plus récentes. –

Répondre

5

Après quelques recherches je suis arrivé avec this answer. Au meilleur de ma connaissance, vous ne pouvez pas réellement annuler l'événement de flou, ni appeler l'événement de mise au point en même temps. C'est ce que je ne comprends pas .. vous pouvez flouter sur la mise au point mais vous ne pouvez pas vous concentrer sur le flou .. De toute façon ma solution est d'utiliser la fonction setTimeout pour appeler l'événement de focus 1ms après la perte de focus.

var o = this; 
oTimeout = setTimeout(function(){ 
    o.focus(); 
},1); 

En utilisant mouseenter et événements MouseLeave, je mis un booléen pour faire référence à un événement de flou

$("div#box").mouseenter(function(){ 
    changeFocus(1); 
}).mouseleave(function(){ 
    changeFocus(0); 
}); 
+0

Merci beaucoup! –

5

J'ai eu le même problème et cela fonctionne pour ce besoin de le faire. Il suffit de forcer le focus sur l'élément.

$('#divWithScrollBar').scroll(
    function() { 
     $('#elementThatLosesFocus').focus(); 
    }); 

Cet événement est en quelque sorte déclenché après que l'élément est floue, mais avant l'événement onblur est ensuite botté en. Je n'ai pas vraiment regardé pour, mais c'est ce qui semble être en cours.

Le défilement apparaît un peu lent, mais cela fonctionne.

IE me doit plusieurs heures de ma vie.

+1

Cela fonctionne si vous faites défiler activement, mais si vous cliquez sur le rectangle de défilement au milieu des flèches, cet événement ne se déclenchera pas. – cgsd

Questions connexes