2011-06-03 60 views
0

工作我目前正在组合一些jQuery,将激活slideDown()时,由js生成的单击元素。

这里是我的功能:

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

这工作正常,但只有当我指定的元素(如上图所示),因此每次激活匹配的元素。如果我使用$(this)像这样:

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

该代码不起作用...有没有人有解决方案?以下是我的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'将始终指'span [title ='yes']'元素。 – 2011-06-03 16:50:52

+0

只是为了让你,问题中的HTML片段没有任何标题属性为'yes'的span标签。但是,下面的答案应该是你正在寻找的。 – 2011-06-03 17:02:34

回答

6

改为使用$(this).closest(".radiowrap")

.delegate() and .live()尽量模仿.bind()尽可能接近;因此,在事件处理程序中,this指向被单击的.radiowrap span[title='yes'],就像直接绑定到<span />一样。

使用.closest(".radiowrap")将会找到点击<span />的祖先.radiowrap,您可以像以前一样继续操作。