2010-08-25 30 views
2

J'ai plusieurs petites pages contextuelles conçues pour se fermer automatiquement lorsqu'elles perdent leur focus, c'est-à-dire que l'utilisateur clique sur le document parent.L'événement Onblur se déclenche par erreur dans IE lorsque des parties d'un document contextuel sont cliquées

Malheureusement, dans IE8, le flou se produit également lorsque l'utilisateur commence à remplir un formulaire de saisie dans la page contextuelle. En effet cliquant partout à l'intérieur du formulaire provoque cela, ou même lorsque l'utilisateur clique accidentellement sur du texte. Il semble que ces éléments ne font pas partie du document contextuel. Comment puis-je les faire ainsi?

Voici mon code de flou (dans un script .js) que j'utilise sur plusieurs fenêtres pop-up:

var fClose=0 

onload=function() { 
fClose=0 
setTimeout("doClose()",111); 
document.onblur=Blur_Me; 
document.onfocusout = Blur_Me; 
} 

function Blur_Me(){ 
fClose=1; 
setTimeout("doClose()",111); 
}  
function doClose(){ 
if(fClose)close(); 
} 
+0

Y a-t-il une raison pour laquelle vous utilisez les événements de document '.onblur' et' .confocusout'? Avez-vous essayé d'utiliser seulement l'un ou l'autre? –

+0

Oui, j'ai lu quelque part que IE "préféré" onfocusout. Un MS "standard" à l'origine il était juste onblur Mais je vais essayer à nouveau sans le onfocusout ... – aqk

+0

Je l'ai essayé sans le onfocusout et maintenant il ne se ferme pas du tout dans IE.Mais ça fonctionne bien en FF (Vous n'avez pas encore essayé Chrome ou Safari) – aqk

Répondre

2

Au lieu d'utiliser blur() vous pouvez utiliser focusin() et focusout() les gestionnaires de jQuery.

L'événement focusin est envoyé à un élément lorsque celui-ci, ou tout élément à l'intérieur, acquiert le focus. L'événement focusout est envoyé à un élément lorsqu'il ou un élément à l'intérieur de celui-ci perd le focus. Ils sont distincts de blur() en ce sens qu'ils prennent en charge la détection de la perte de focus des éléments parents (en d'autres termes, ils prennent en charge le barbotage d'événements).