2010-09-13 4 views
1

J'ai un énorme problème.Prévenir les bulles après le chargement?

Je vais avoir un div nommé « #box » qui charge du contenu externe après avoir cliqué sur les liens qu'il contient:

$("#box a").click(

function(e) 
{ 
e.preventDefault(); 
var hash = this.parentNode.hash; 
    $("#boxLoaded").load('boxFiles/'+ hash.substring(1) +'.html'); 
    $("#box").fadeOut(100); 
    $("#boxLoaded").fadeIn(200);  
}); 

facile jusqu'à présent :)

Lorsque quelqu'un clique ne importe où dans « #boxLoaded » il disparaît et charges boîte à nouveau, il ressemble au début:

$("#boxLoaded").click(
    function() 
    { 
     $("#boxLoaded").fadeOut(200); 
     $("#box").show(); 
}); 

le problème est que j'ai un menu nommé « boîte-menu » dans les fichiers chargés (à l'intérieur de #boxLoaded) et quand quelqu'un cli cks les - le code ci-dessus est en train d'être exécuté (effacement de #BoxLoaded et #Box).

Je veux l'empêcher de se produire, mais:

$("#box-menu").click(
    function(e) 
    { 
     e.preventDefault() 
}); 

Que faire? Il fonctionne très bien, quand je ne suis pas le chargement() ces fichiers ...

Répondre

3

Vous avez juste besoin de passer à .live() et arrêter le bouillonnement via event.stopPropagation() ici:

$("#box-menu").live("click", function(e) { 
    e.stopPropagation(); 
}); 

Alternativement, vous pouvez re-lier puis charger, de changer cette situation

$("#boxLoaded").load('boxFiles/'+ hash.substring(1) +'.html'); 

à ceci:

$("#boxLoaded").load('boxFiles/'+ hash.substring(1) +'.html', function() { 
    $("#box-menu").click(function(e) { e.stopPropagation(); }); 
}); 
+0

Auch. Je suis enfin capable de faire quelque chose avec ce menu en utilisant jQuery (votre sélecteur fonctionne parfaitement et je suis capable de changer les bordures/arrière-plans etc.), MAIS le stop stil de propagation ne fonctionne pas. Qu'est-ce qui ne va pas?

- fade out the boxLoaded div;/ – fomicz

+0

@fomicz - Utilisez-vous '.live()' ou re-binding? Selon l'ordre que vous voudrez peut-être redéfinir pour être sûr, sinon l'ordre des bindings peut avoir de l'importance (ils s'exécutent dans l'ordre), donc vous devrez peut-être passer à '.delegate()' et le lier en premier. –

+0

La première méthode ne fonctionne pas, mais la seconde le fait. Brillant! Tu es là tout le temps, n'est-ce pas U une sorte de bot Nick? ;) – fomicz

0

En appelant e.preventDefault(), vous empêchez uniquement le lien de reprendre son événement par défaut. Après que le lien a été cliqué sur le div contenant #boxLoaded a toujours sa commande onclick(). Au lieu d'utiliser e.preventDefault(), essayez return false. Je pense que cela devrait faire la même chose que preventDefault() dans ce cas et aussi annuler les commandes qui suivent.

- Je ne peux pas commenter les messages des peuples encore, mais en réponse à Nick, « ​​thats ce cool, ne se rendent pas compte qu'il y avait une fonction e.stopPropagation() »

Questions connexes