2010-07-13 9 views
0

J'utilise .prepend() et .remove() pour afficher les éléments de menu dans l'ordre un utilisateur clique dessus.en utilisant le préfixe et supprimer

$(document).ready(function() 
{ 
    $('#item1').click(function() 
    { 

     $('#item1_content').remove(); 

     $('.menu_item_content').prepend('<div id="item1_content">The Box For Menu Item One</div>'); 

    }); 

    $('#item2').click(function() 
    { 

     $('#item2_content').remove(); 

     $('.menu_item_content').prepend('<div id="item2_content">The Box For Menu Item Two</div>'); 

    }); 
}); 

J'utilise .remove() pour supprimer l'élément si elle existe déjà et le .prepend() pour le mettre en haut du conteneur div

De cette façon, l'utilisateur peut afficher autant ou aussi peu du menu articles comme ils veulent à la fois et dans l'ordre où ils cliquent sur eux, mais les doublons ne devraient pas apparaître.

Par exemple. L'utilisateur peut cliquer MenuItem3 puis MenuItem1 ensuite MenuItem2 et les éléments apparaissent ci-dessous:

Item2 Item1 Item3

La première moitié de mon script fonctionne # Item1 mais # item2 n'a pas, il ne cesse de faire des doublons.

Aussi, si je fais # item1 puis # item2 puis # item1 à nouveau, je reçois un doublon.

Qu'est-ce que je fais mal ici? Y a-t-il une meilleure manière de faire cela?

+0

Le code fourni [fonctionne pour moi] (http://jsbin.com/elule/edit). – Matchu

+0

Vous avez déjà commencé à basculer entre les éléments de menu? Dites deux deux deux un un deux un ... cependant? – ian

Répondre

1

Vous n'avez réellement pas besoin de la fonction remove(). Cela devrait fonctionner correctement, en supposant que votre HTML est similaire:

<div class="menu_item_content"> 
    <div id="item1"> 
    <div id="item1_content">MenuItem1</div> 
    </div> 
    <div id="item2"> 
    <div id="item2_content">MenuItem2</div> 
    </div> 
    <div id="item3"> 
    <div id="item3_content">MenuItem3</div> 
    </div> 
</div> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<script> 
jQuery(document).ready(function() { 
    jQuery('.menu_item_content').children().click(function() { 
    jQuery('.menu_item_content').prepend(jQuery(this)); 
    }); 
}); 
</script> 
+0

Est-ce que cela fonctionnera si je veux montrer juste un nombre variable d'éléments de menu? Par exemple, si l'utilisateur ne clique que sur 1, je veux seulement afficher 1. – ian

+0

@ian: Pourriez-vous modifier votre question pour inclure la partie pertinente du code HTML? Il est difficile de voir exactement ce que vous essayez de faire. –

+0

@ian: J'ai couru votre code avec '

Item 1
Item 2
' comme le HTML et cela fonctionne parfaitement bien. Avez-vous essayé d'utiliser FireBug ou une autre console Javascript pour voir si vous obtenez un message d'erreur? Tout ce que je peux penser est que votre HTML est incorrect ou que vous utilisez une ancienne version de jQuery. –

Questions connexes