2009-07-31 9 views
1

J'essaie d'adapter le show/hide/mini-accordéon d'Andy Langton (http://andylangton.co.uk/jquery-show-hide) pour travailler dans une table. Je veux créer une liste d'événements avec un formulaire de confirmation attaché à chaque événement. En cliquant sur le bouton 'confirmer' dans la dernière cellule ou la rangée, j'aimerais que le formulaire associé à cet événement particulier soit révélé.Utilisation de jQuery show/hide bascule dans un tableau

code de Andy utilise

$('.toggle') 
    .prev() 
    .append('<a href="#" class="toggleLink">'+showText+'</a>'); 

pour ajouter dynamiquement le lien bascule (le bouton confirmer) juste avant la forme cachée. Cela, cependant, ajoute le lien dans la ligne du tableau et non dans une cellule. Je l'ai donc changé pour

$('.toggle') 
    .prev() 
    .append('<td><a href="#" class="toggleLink">'+showText+'</a></td>'); 

Le lien est maintenant à la bonne place mais n'invoque pas maintenant le show/hide du formulaire. Quand il a été placé incorrectement la fonctionnalité a fonctionné, en dépit d'être tout à fait raison. Je sens que le sélecteur appelant l'action de bascule n'est pas correct mais je ne sais pas comment le corriger. Il est actuellement

$(this) 
    .parent() 
    .next('.toggle') 
    .toggle('slow'); 

Ceci est essentiellement la façon dont la source semble ...

<table id="training-events"> 
<tr> 
    <th>Date/Time</th> 
    <th>Event/Venue</th> 
    <th>Cost</th> 
    <th>Confirm</th> 
</tr> 
<tr class="event" valign="top"> 
    <td class="date">Mon, 10 August 2009<br>03:30 PM - 05:30 PM</td> 
    <td><h5>Regional Director Meeting</td> 
    <td>No Charge</td> 
    <td><a href="#" class="toggleLink">Cancel</a></td> 
</tr> 
<tr style="display: none;" class="toggle"> 
    <td colspan="4"> 
     ** FORM ** 
    </td> 
</tr> 
</table> 

Répondre

5

Vous avez besoin quelque chose comme:

$(this).parent().parent().next('.toggle').toggle('slow') 

ou

$(this).closest('tr').next('.toggle').toggle('slow'); 

Vous êtes seulement faire un appel parent seul() qui vous amène à la TD, vous devez relever le TR .

+0

Merci, ça a marché! :-) Il ne s'affiche toujours pas correctement, même si la ligne show/hide est définie sur 4 colonnes, ce n'est pas ... mais c'est quelque chose que j'ai raté - http: // développement. dekken.co.uk/bni/training/ Savez-vous comment obtenir ce basculement sans animation? J'aimerais qu'il apparaisse comme un plutôt que petit à petit. merci encore. – Dekken

+0

Pour afficher/masquer sans l'animation, vous pouvez simplement utiliser toggle(). En ce qui concerne les lignes, il y a deux choses que je peux penser: Premièrement, puisque vous avez toujours l'intention d'avoir un formulaire, vous pourriez aussi bien l'avoir généré côté serveur plutôt que de se fier au javascript pour le faire. Deuxièmement, si pour une raison quelconque vous ne pouvez pas ajouter le formulaire dans le HTML ou le générer côté serveur, il serait peut-être préférable d'ajouter les éléments DOM individuellement plutôt que d'utiliser append pour une chaîne de HTML. – doomspork

0

Cela fonctionne pour moi si je retire le style = "display: none;" à partir du toggle TR.

Vous remarquerez dans l'exemple qu'il fait aussi:

$('.toggle').hide(); 

C'est ce qui se cache les éléments de bascule classés.

+0

De quel «cela» parlez-vous a travaillé pour vous? –

+0

Oups, c'était une pâte ratée. J'essayais d'ajouter un code similaire à celui fourni par Doomspork avec les deux appels parent(). – chsh