2009-04-12 5 views
0

J'ai rencontré une page web gênante dont la structure est compliquée. Si un DIV est cliqué par la souris, tout est OK. Cependant, si elle est focalisée par javascript (divElement.focus). La disposition devient désordonnée. Cela n'arrive que dans IE7/8.Quelle est la différence entre Click-to-focus et focus-by-javascript?

Alors, y a-t-il une différence entre click-to-focus et focus-by-javascript dans IE?

Répondre

3

L'envoi d'un événement focus Javascript ne déclenche pas d'événement click. Sans voir le code pertinent, je suis amené à deviner qu'un gestionnaire click est en place et qu'il n'est pas appelé dans le cas où vous déclenchez un événement focus.

Vous pouvez essayer, au contraire, tirer un click:

var clickEvent; 
if(document.createEvent) { 
    clickEvent = document.createEvent('click'); 
    clickEvent.initMouseEvent('click'); 
    divElement.dispatchEvent(clickEvent); 
} else { 
    // Semi-pseudocode for IE, not tested, consult documentation if it fails 
    clickEvent = document.createEventObject(); 
    divElement.fireEvent('onclick'); 
} 

Ou si vous êtes dans la chose jQuery:

$(divElement).click(); 

Il y a des solutions similaires pour Prototype et (recherche de l'événement. simuler).

+0

En réalité, il n'y a pas d'autre événement de clic. Le focus est appelé dans le gestionnaire d'événements onbeforedeactivated de l'autre élément. –

+1

Morgan Cheng, je peux me tromper mais je doute que quelqu'un puisse vous donner une réponse plus précise sans voir le code approprié. – eyelidlessness

0

La définition de l'action Focus consiste à amener l'entrée (clavier ou souris) sur un élément donné, généralement un champ de saisie. Lorsqu'un élément obtient le focus, un événement OnFocus est déclenché. Quand il perd le focus, un événement OnBlur est déclenché. Ce que vous obtenez habituellement en cliquant est l'événement OnClick, qui n'est pas nécessairement lié aux deux précédents.

0

Cela se produit uniquement dans IE7/8.

Hmm, alors je suis sûr que c'est un bug lié à IE. Pas étonnant. Si des événements JavaScript légitimes sont impliqués, ils doivent se déclencher uniformément dans tous les navigateurs.

Questions connexes