2011-04-18 2 views
0

MISE À JOUR:JQuery Accordéon: Ouvrir un lien au lieu de glisser vers le bas accordéon lorsque vous cliquez sur un en-tête

$('#menu1').bind('accordionchangestart', function(e, ui) 
{ 
    console.log('accordionchangestart event triggered'); 
    e.preventDefault(); 
}); 

J'ai essayé le code ci-dessus, je reçois le message de la console, mais l'accordéon glisse toujours vers le bas. Y a-t-il un moyen d'empêcher l'accordéon de glisser sur l'événement? Je ai essayé return false et e.stopImmediatePropagation(). Aucun d'entre eux ne semble empêcher l'accordéon de glisser vers le bas.


Voici mon code HTML d'accordéon:

<div id="menu1"> 
    <div> 
     <h3><a href="#">Item 1</a></h3> 
     <div> 
      <a href="#">Item 1.1</a><br> 
      <a href="#">Item 1.2</a><br> 
      <a href="#">Item 1.3</a><br> 
      <a href="#">Item 1.4</a><br> 
     </div> 
    </div> 
    <div> 
    <h3><a href="item2.html">Item 2</a></h3> 
    <div></div> 
    </div> 
    <div> 
    <h3><a href="#">Item 3</a></h3> 
    <div> 
     <a href="#">Item 3.1</a><br> 
     <a href="#">Item 3.2</a><br> 
     <a href="#">Item 3.3</a><br> 
     <a href="#">Item 3.4</a><br> 
    </div> 
    </div> 
</div> 

Je veux l'accordéon à travailler normalement, sauf lorsque le lien d'en-tête n'est pas #. Par exemple, href Item 2 est item2.html. Dans ce cas, je veux qu'il fonctionne comme un lien normal et ouvre la page.

Répondre

1

C'est ce que vous pouvez faire:

Le code HTML:

<div id="menu1"> 
    <div> 
     <h3><a href="#">Item 1</a></h3> 
     <div> 
      <a href="#">Item 1.1</a><br> 
      <a href="#">Item 1.2</a><br> 
      <a href="#">Item 1.3</a><br> 
      <a href="#">Item 1.4</a><br> 
     </div> 
    </div> 
    <div> 
    <h3><a href="item2.html">Item 2</a></h3> 
    <div></div> 
    </div> 
    <div> 
    <h3><a href="#">Item 3</a></h3> 
    <div> 
     <a href="#">Item 3.1</a><br> 
     <a href="#">Item 3.2</a><br> 
     <a href="#">Item 3.3</a><br> 
     <a href="#">Item 3.4</a><br> 
    </div> 
    </div> 
</div> 

Le javscript:

$(document).ready(function(){ 
    $("#menu1 div div").hide(); 
    $("#menu1 div h3 a").click(function(e){ 
     if($(this).attr("href") == "#"){  
      e.preventDefault(); 
      $("#menu1 div div").slideUp(); 
      $(this).parent().next().slideDown(); 
     } 
    }); 
}); 

Le jsfiddle

+0

Je sais que cela ne devrait pas importer dans cet exemple, mais son meilleur prac pour utiliser '===' au lieu de '==' pour éviter toute ambiguïté –

+0

@Zach - C'est vrai. C'est une bonne pratique de programmation, mais j'ai été mauvais. –

+0

J'utilise déjà le JQuery Accordian pour le faire glisser vers le haut et vers le bas, mais le problème est que preventDefault à l'événement click n'empêche pas la div de glisser vers le bas. – HyderA

0

changer votre événement de clic pour inclure quelque chose comme ceci:

if ($(this).attr("href") != "#") { 
    window.location = $(this).attr("href"); 
    return; 
} 
0

Pouvez-vous nous montrer le plugin que vous utilisez? Ou est-ce fait maison?

Si c'est un plugin, vous pouvez aller à l'événement et dire: si href est différent de #, alors allez sur le lien.

pour l'exemple

$('h3').click(function(){ 
    if($(this).attr('href') != '#'){ return true; } 
}); 

Ou quelque chose comme ça. Difficile à dire sans le script javascript.

+0

Il est l'interface utilisateur JQuery Accordéon: http: // docs .jquery.com/UI/Accordion – HyderA

Questions connexes