jQuery delegate()将无法使用$(this)

时间:2011-06-03 16:47:13

标签: javascript jquery

我正在整理一些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>

1 个答案:

答案 0 :(得分:6)

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

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

使用.closest(".radiowrap")会找到点击的.radiowrap的祖先<span />,您可以像往常一样继续进行。