2012-10-31 4 views
1

Je veux cliquer sur un lien et basculer entre deux blocs de contenu, dans une liste de contenu, pour passer essentiellement de l'affichage du contenu à la modification du contenu.Comment rationaliser et compresser le code jQuery répétitif

J'ai les snipits suivantes de code:

<style type="text/css"> 
    div.show {display:block;} 
    input.hide {display:none;} 
</style> 

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('#d-01').on('click', function() { 
      $('#d-01-on').toggle(); 
      $('#d-01-off').toggle(); 
      $('#d-01-off').focus(); 
     }); 
     $('#d-02').on('click', function() { 
      $('#d-02-on').toggle(); 
      $('#d-02-off').toggle(); 
      $('#d-02-off').focus(); 
     }); 
     $('#d-99').on('click', function() { 
      $('#d-99-on').toggle(); 
      $('#d-99-off').toggle(); 
      $('#d-99-off').focus(); 
     }); 
    }) 
</script> 

<a href="#" id="d-01">edit</a> 
<div class="show" id="d-01-on">Some content</div> 
<input class="hide" id="d-01-off" name="d-01" value="Some content" /> 

<a href="#" id="d-02">edit</a> 
<div class="show" id="d-02-on">Some content</div> 
<input class="hide" id="d-02-off" name="d-02" value="Some content" /> 

<a href="#" id="d-99">edit</a> 
<div class="show" id="d-99-on">Some content</div> 
<input class="hide" id="d-99-off" name="d-99" value="Some content" /> 

Cela fonctionne, mais je veux faire mon jquery/javascript code plus dynamique et non codés en dur. Mes rangées de tables MySQL augmenteront avec le temps et je ne veux pas devoir continuer à éditer mon script.

Est-il possible de réécrire le code jquery pour gérer dynamiquement les ID plutôt que de devoir créer des on('click', function() individuels et redondants?

Merci de votre aide.

[voir How to Toggle in jQuery pour ma première question à ce problème]

+0

Si vous avez besoin d'un coup de main, n'hésitez pas à consulter le service d'assistance de jQuery. Merci. –

+0

Répondu à http://stackoverflow.com/questions/13309322/how-to-take-hard-coded-repetitive-jquery-syntax-and-condense-to-be-dynamic –

Répondre

1

Je ne sais pas si j'understanded ce que vous voulez, mais ici je vais:

d'abord ajouter un div pour envelopper chaque section repetive du balisage HTML, dans cet exemple, j'ai ajouté une classe appelée -enveloppe de contenu ajouter l'événement click jquery plus facile:

<div class="content-wrapper"> 
    <a href="#" id="d-01">edit</a> 
    <div class="show" id="d-01-on">Some content</div> 
    <input class="hide" id="d-01-off" name="d-01" value="Some content" /> 
</div> 

<div class="content-wrapper"> 
    <a href="#" id="d-02">edit</a> 
    <div class="show" id="d-02-on">Some content</div> 
    <input class="hide" id="d-02-off" name="d-02" value="Some content" /> 
</div> 

<div class="content-wrapper"> 
    <a href="#" id="d-99">edit</a> 
    <div class="show" id="d-03-on">Some content</div> 
    <input class="hide" id="d-03-off" name="d-03" value="Some content" /> 
</div> 

Puis j'ai modifié le JS au code suivant:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('.content-wrapper a').on('click', function() { 
      $(this).siblings().toggle(); 
      $(this).siblings('input').focus(); 
     }); 
    }) 
</script> 

La JS ajoute un événement à chaque ancre (une étiquette) à l'intérieur des divs de-emballage de contenu, puis quand on clique dessus, il vérifie ses frères et sœurs (les balises à côté aiment: div.show et l'entrée) et les permute. J'ai ajouté un filtre dans les deuxièmes frères et sœurs pour obtenir seulement l'entrée de l'ancre cliquée et la focaliser. Je n'ai pas testé mais cela devrait fonctionner.

+0

Merci @Skatox. Je le regarderai plus tard ce soir car je dois m'occuper d'une question différente maintenant. Fondamentalement, ce dont j'ai besoin est de faire fonctionner la section javascript/jquery en lui passant un paramètre pour indiquer l'identifiant div pour basculer. En ce moment ma table a 25 rangs. Je ne veux pas utiliser 25 instances du code jquery commun (comme je le fais dans mon exemple ci-dessus) car dès que mon client ajoute une nouvelle ligne à la db ma requête n'aura pas été codée et couverte dans la section jquery . J'espère que cela fait un peu plus de sens. –

+0

Ok, essayez la nuit et laissez-moi savoir si cela a fonctionné. Actuellement, la solution que je vous ai donnée est dynamique, vous pouvez ajouter autant de lignes que vous le souhaitez et cela fonctionnera. – Skatox

+0

Merci @Skatox. J'ai dû travailler dans un sous-sol inondé toute la nuit, donc je n'ai pas encore eu l'occasion de regarder ça. Je le ferai dans quelques heures. Merci pour ton aide. –