javascript
  • jquery
  • 2011-06-03 6 views 0 likes 
    0

    Je suis actuellement en train d'assembler quelques jQuery qui vont activer slideDown() quand on clique sur un élément qui est généré par js.

    Voici ma fonction:

    $('.radiowrap').delegate("span[title='yes']", "click", function() { 
        $('.radiowrap').next('.secondq:first').slideDown('medium'); 
    }); 
    

    Cela fonctionne bien, mais seulement si je spécifie l'élément (comme indiqué ci-dessus) activant donc chaque élément correspondant. Si j'utilise $ (this) comme ceci:

    $('.radiowrap').delegate("span[title='yes']", "click", function() { 
        $(this).next('.secondq:first').slideDown('medium'); 
    }); 
    

    Le code ne fonctionne pas ... est-ce que quelqu'un a une solution? Voici un extrait de mon code HTML:

    <div class="option radio"> 
        <h2 class="block">Do you have a hot water tank?</h2> 
        <div class="radiowrap"> 
         <div class="radiocont"> 
          <label>Yes</label> 
          <input type="radio" class="styled" value="yes" name="watertank" /> 
         </div> 
         <div class="radiocont"> 
          <label>No</label> 
          <input type="radio" class="styled" value="no" name="watertank" /> 
         </div> 
        </div> 
        <div class="secondq" style="display:none;"> 
         <h2>What type of water tank is it?</h2> 
         <div class="radiowrap"> 
          <div class="radiocont"> 
           <label>Steel</label> 
           <input type="radio" class="styled" value="steel" name="watertanktype" /> 
          </div> 
          <div class="radiocont"> 
           <label>Fibreglass</label> 
           <input type="radio" class="styled" value="Fibreglass" name="watertanktype" /> 
          </div> 
         </div> 
         <h2 align="left">How much insulation does it have?</h2> 
         <input type="text" align="right" name="bonus" class="value" disabled="disabled" /> 
         <div class="slidewrap"> 
          <div class="sliderMm slider"></div> 
         </div> 
        </div> 
    </div> 
    
    +2

    'this' se référera toujours à l'élément' span [title = 'yes'] '. –

    +0

    Juste pour vous laisser, l'extrait de code HTML que vous avez dans la question n'a pas de balises span avec un attribut de titre de «oui». Cependant, la réponse ci-dessous devrait être ce que vous cherchez. –

    Répondre

    6

    Utilisez plutôt $(this).closest(".radiowrap"). Essayez d'émuler le .bind() le plus près possible; Ainsi, à l'intérieur du gestionnaire d'événements, this pointe sur le .radiowrap span[title='yes'] sur lequel vous avez cliqué, comme si vous étiez directement lié à ce <span />.

    En utilisant .closest(".radiowrap"), vous trouverez l'ancêtre .radiowrap du <span /> cliqué, d'où vous pouvez procéder comme précédemment.

    Questions connexes