2011-06-03 56 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,您可以像以前一樣繼續操作。