我正在整理一些jQuery,它会在点击由js生成的元素时激活slideDown()。
这是我的功能:
$('.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>
答案 0 :(得分:6)
改为使用$(this).closest(".radiowrap")
。
.delegate()
和.live()
尝试尽可能地模仿.bind()
;因此,在事件处理程序中,this
指向被单击的.radiowrap span[title='yes']
,就像您直接绑定到<span />
一样。
使用.closest(".radiowrap")
会找到点击的.radiowrap
的祖先<span />
,您可以像往常一样继续进行。