2011-09-23 5 views
0

J'utilise ce code pour faire une boucle dans chaque ". Accessoryrow", puis sélectionnez "dialogue" + compteur et ".see-détails" + compteur. Donc, la première fois que la boucle passe, elle sélectionne la classe dialog1 et la classe see-details1; deuxième fois dialog2, voir-détails2 et ainsi de suite. Je pense que je ne suis pas en train d'ajouter correctement un compteur au sélecteur. S'il vous plaît corrigez-moi. MercijQuery boucle à travers des classes en utilisant chaque() - problème

CODE:

var counter = 1; 
     $(function() { 
     $(".accessoryrow").each(function() { 
      $(".dialog" + counter).dialog({ 
       autoOpen: false, 
       show: "blind", 
       hide: "fade" 
      }); 

      $(".see-details" + counter).click(function() { 
       $(".dialog" + counter).dialog("open"); 
       return false; 
      }); 
      counter++; 
     }); 
+0

Avez-vous des erreurs javascript? – Jack

+0

Non, et il semble que ce soit en train de sélectionner correctement parce que si je ne sélectionne pas, j'ai du texte supplémentaire sur la page. C'est juste qu'il n'affiche pas la boîte de dialogue sur see-details cliquez sur –

+0

Est-ce que '.see-details' est ajouté au DOM après le chargement de la page? – Jack

Répondre

1

Le problème est que la ligne $(".dialog" + counter).dialog("open"); n'est pas évaluée tant que le lien n'est pas cliqué. Ainsi, il utilise la valeur counter qui est actuellement à partir de. Une meilleure façon de le faire serait de supprimer complètement le compteur, et d'utiliser les sélecteurs jQuery pour sélectionner le bon fichier .dialog.

Sans le code HTML, je ne peux pas dire ce qu'il devrait ressembler, mais vous allez avoir la fonction de clic pour ressembler à quelque chose le long des lignes de

$(".see-details").click(function() { 
     $(this).sibling(".dialog").dialog("open"); 
     return false; 
    }); 

Bien sûr, cela suppose que l'élément .dialog est en réalité un frère de .see-details. Vous devrez traverser l'arbre un peu plus si ce n'est pas le cas.

0

Essayez cette (non testé):

$(function() { 
    $(".accessoryrow").each(function(index) { 
     $(".dialog" + (index + 1)).dialog({ 
      autoOpen: false, 
      show: "blind", 
      hide: "fade" 
     }); 

     $(".see-details" + (index + 1)).click(function() { 
      $(".dialog" + (index + 1)).dialog("open"); 
      return false; 
     }); 
    }); 

Index passe le numéro de boucle à la fonction. Il commence à partir de 0, où je pense que vous avez besoin de commencer à 1, donc j'ai ajouté 1 à chaque fois où il est utilisé.

+0

Je suis sûr que l'index ne sera pas visible pour la fonction interne. Même si c'était le cas, la fonction interne n'est évaluée que sur click, donc l'index sera la mauvaise valeur. – Bobson

+0

Je réalise que cette question est répondue mais l'index est visible à la fonction interne. Ceci dans document.ready: '$ ('. SomeClass'). Chaque (fonction (index) { $ (this) .click (function() { alerte (index); }); });' Les alertes qui apparaissent dans ce cas affichent la valeur d'index pour cet élément, 0 - N. – Robert

+0

Hmm. Je n'ai jamais réussi à le faire fonctionner avant. Je vais devoir revoir la question la prochaine fois que j'en aurai besoin. Clairement, j'ai fait quelque chose de mal. – Bobson

Questions connexes