Le problème peut être que l'encapsuleur du gestionnaire d'événements jQuery doit utiliser window.event
pour récupérer l'événement en cours dans IE. Si vous définissez un gestionnaire à partir de la fenêtre A sur un événement dans la fenêtre B, le script dans la fenêtre A va regarder window.event
de la fenêtre A, tandis que l'événement se produit réellement sur la fenêtre B.
Mais il peut y avoir plus de problèmes que cela , aussi. Les scripts de cross-window/frame sont chargés de difficultés et jQuery n'est pas spécialement conçu pour les contourner. Pour que jQuery fonctionne correctement en mode cross-frame, vous aurez généralement besoin d'une instance de jQuery dans les deux fenêtres, et vous ne devez utiliser que l'instance correspondante de jQuery ($) pour interagir avec chaque fenêtre.
eta re commentaire:
OK, après avoir regardé dans mousewheel
plus loin, je ne sais pas comment votre code peut travailler dans Firefox (il ne certainement pas pour moi). Firefox ne prend pas en charge les événements mousewheel
; à la place, il prend en charge les événements DOMMouseScroll
. Aussi pour les autres navigateurs qui supportent mousewheel
, il devrait être lié à un nœud DOM plutôt qu'à la fenêtre. Donc je suppose que ce que vous cherchez est:
if ('MouseScrollEvent' in window) {
$(document).bind('DOMMouseScroll', function(event) {
return scroll(event.detail*-40);
});
} else {
$(document).bind('mousewheel', function(event) {
return scroll(event.wheelDelta);
});
}
function scroll(d) {
window.scrollBy(-d, 0);
return false;
};
(Cependant, dans WebKit cela arrêtera le défilement lorsque la souris se déplace hors de la zone horizontale correspondant à la largeur de la fenêtre, vous pouvez préférer lier les événements au. élément plus large comme la div, si elle remplit le navigateur.)
J'ai décidé d'utiliser simplement la version de travail, si vous avez un code de travail, pourquoi se demander pourquoi la version qui ne fonctionne pas est défectueuse ?! – Mohammad