2009-11-02 7 views
0

Ce code ci-dessous fonctionne bienwindow.parent sélecteur jQuery ne fonctionne pas dans IE8

$('html').bind('mousewheel', function(event, delta) { 
    window.parent.scrollBy(-120 * delta,0); 
    return false; 
}); 

mais celui-ci n'a pas, quelqu'un peut me dire pourquoi. J'aimerais savoir.

$(window.parent).bind('mousewheel', function(event, delta) { 
    window.parent.scrollBy(-120 * delta,0); 
    return false; 
}); 

Je voudrais préciser que le sélecteur window ne fonctionne pas dans ce cas non plus.

+0

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

Répondre

1

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.)

+0

salut bobice, il n'y a qu'une seule fenêtre dans ce cas et j'ai essayé "window.event" au lieu de "event" dans le gestionnaire, mais il ne produit que des erreurs de syntaxe, à la fois dans dreamweaver et IE8. – Mohammad

+0

S'il n'y a qu'une seule fenêtre, pourquoi accédez-vous 'window.parent'? – bobince

+0

Quoi qu'il en soit, la propriété delta serait normalement appelée 'event.wheelDelta'. Mais si vous avez des erreurs de syntaxe, vous n'allez même pas aussi loin! – bobince

Questions connexes