我正在尝试创建一个包含多个部分的表单,其中包含“是/否”单选按钮和一个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/
干杯,
灰
答案 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');
}
});
});