jquery - next()不起作用,但siblings()会

时间:2014-05-02 12:25:03

标签: javascript jquery html

我正在尝试创建一个包含多个部分的表单,其中包含“是/否”单选按钮和一个textarea。页面加载时,textareas被禁用,默认情况下会检查所有“no”单选按钮。我试图得到它,以便一旦用户选择“是”单选按钮,禁用的属性将从相关的textarea中删除。

我正在尝试使用next('textarea'),但这似乎不起作用。奇怪的是,兄弟姐妹确实有效(使用相同的选择器),但显然它针对的是所有textareas而不仅仅是相关的。(

有什么想法吗?

这是我的代码(简化):

<input type="radio" value="Yes" name="rdo" />Yes
<input type="radio" value="No" name="rdo" checked/>No
<br />
<textarea rows="4" cols="50" disabled></textarea>

$(document).ready(function(){
    $(":radio[value=Yes]").click(function(){
        if ($(this).attr('checked','true')) {
            $(this).next('textarea').removeAttr('disabled');
        }
    });
});

参见JSFiddle:http://jsfiddle.net/AThomas92/Ry2fX/

干杯,

3 个答案:

答案 0 :(得分:5)

如jQuery doc所述:

  

的.next()

     

获取匹配元素集中每个元素的紧随其后的兄弟。如果提供了选择器,则仅当它与该选择器匹配时,它才会检索下一个兄弟。

所以$(":radio[value=Yes]")的下一个是输入号

这里有2个其他选项(已经说明了1个):

答案 1 :(得分:3)

是的,这是一个明显的结果,因为.next('textarea')只会使用提供的选择器搜索当前元素之后的下一个兄弟。但与.next()不同,.siblings()将通过提供的选择器搜索当前元素周围的所有兄弟节点,并返回匹配的节点。

答案 2 :(得分:1)

您需要包装输入以使其可以正常工作

<div class="wrapper">
   <input type="radio" value="Yes" name="rdo" />Yes
   <input type="radio" value="No" name="rdo" checked/>No
   <br />
   <textarea rows="4" cols="50" disabled></textarea>
</div>
$(document).ready(function(){
    $(":radio[value=Yes]").click(function(){
        if ($(this).attr('checked','true')) {
            $('textarea', $(this).parent()).removeAttr('disabled');
        }
    });
});