2010-09-22 4 views
1

Je travaille sur une bannière JavaScript pour un client et j'ai frappé un mur. La bannière fonctionne bien dans Chrome, Firefox, IE7 et 8. Safari, cependant, permet à l'utilisateur de fermer la bannière une fois et l'ouvrir une fois, puis il cesse de répondre aux clics. L'utilisateur devrait pouvoir ouvrir et fermer la bannière autant de fois qu'il le souhaite.Le délégué de jQuery() ne fonctionne pas correctement dans Safari, fonctionne bien dans tous les autres navigateurs

Plutôt que d'encombrer ce post avec des extraits de code, un exemple de la bannière peut être trouvée ici: http://jsfiddle.net/M3EPK/2/embedded

Je l'ai commenté sur le code précédent qui a été tenté à un moment donné. Est-ce que n'importe qui peut me donner n'importe quelle explication de pourquoi cela fonctionnerait dans tous ces navigateurs pourtant échouer si lamentablement dans Safari. Tous les navigateurs sont les dernières versions (en dehors de IE pour ainsi dire).

+0

Je me demandais juste pourquoi vous avez $ ($ banner)? Ne devrait-il pas être $ ('# banner')? Je vois que vous mettez var $ banner =. Je pense que cela devrait juste être var banner =, et alors vous pouvez faire $ (bannière). Je ne pensais pas que vous pouviez mettre un signe dollar devant la variable en javascript. – Metropolis

+0

Aussi, vous pouvez simplifier jQuery (document) .ready (fonction ($) à $ (function() {}); – Metropolis

+0

J'utilise $ banner parce que si je devais utiliser $ ('# banner'), cela impliquerait jQuery recherche son emplacement chaque fois qu'il est rencontré Le signe dollar qui précède le nom de la variable est utilisé à mes propres fins.Il me permet de savoir que la variable est associée à un objet jQuery.Comme pour la simplification, je l'ai comme jQuery (document) ... parce que j'ai utilisé jQuery.noConflict() pour libérer l'alias de signe dollar pour toutes les autres bibliothèques qui pourraient être sur la page –

Répondre

0

Avez-vous essayé d'utiliser .live() à la place?

+0

J'ai essayé d'utiliser .live(), mais en vain .delegate() fonctions d'une manière très similaire, et a en fait quelques avantages sur .live() http://www.learningjquery.com/2010/03/using-delegate-and-undelegate-in-jquery-1-4-2 –

+0

Oui c'est le cas ... juste vérifier si c'est le problème .. ..Hmmm ..... Votre code me semble correct, mais je vous garantis que c'est quelque chose dans votre code qui le provoque. J'ai eu le même problème l'autre jour. Essayez d'ajouter des alertes et continuez à le tester en safari jusqu'à ce que vous trouviez où il s'arrêtait. – Metropolis

Questions connexes