【发布时间】:2013-11-18 02:01:37
【问题描述】:
我有一个这样开头的 HTML 表单:
<div class="row form-group">
<label for="real_name" class="col-sm-3 control-label">Name</label>
<div class="col-sm-5">
<input type="text" class="form-control require_name" name="real_name" id="real_name" maxlength="100">
</div>
<div class="col-sm-4 btn-group">
<div class="btn btn-default btn-private btn-warning">
<label for="private_check">Private</label>
<input type="radio" id="private_check" class="privacy_check" name="privacy[real_name_privacy]" value=0 checked="checked" />
</div>
<div class="btn btn-default btn-public">
<label for="public_check">Public</label>
<input type="radio" id="public_check" class="privacy_check" name="privacy[real_name_privacy]" value=1 />
</div>
</div>
</div>
<div class="row form-group">
<label for="display_name" class="col-sm-3 control-label">Artist Name</label>
<div class="col-sm-5">
<input type="text" class="form-control require_name" name="display_name" id="display_name" value="This guy" maxlength="100">
</div>
<div class="col-sm-4 btn-group">
<div class="btn btn-default btn-private">
<label for="private_check">Private</label>
<input type="radio" id="private_check" class="privacy_check" name="privacy[display_name_privacy]" value=0 />
</div>
<div class="btn btn-default btn-public btn-warning">
<label for="public_check">Public</label>
<input type="radio" id="public_check" class="privacy_check" name="privacy[display_name_privacy]" value=1 checked="checked" />
</div>
</div>
</div>
等等,大约有十几个。对于“btn-group”中的那些 .btn div,我有这个 jQuery:
$(".btn").click(function() {
$(this).find("input").attr('checked', true);
$(this).siblings().find("input").attr('checked', false);
$(this).toggleClass('btn-warning btn-default');
$(this).siblings().toggleClass('btn-default btn-warning');
});
当单击 .btn 时,应该切换每个 .btn 上的基础输入,并将其类从 .btn-warning 切换到 .btn-default,具体取决于它是否已被检查。以上显然不起作用:在第一个上单击 .btn 将在 .btn 中切换其兄弟的属性,但此后的每个 .btn 都会在 DOM 中切换其上方的每个属性,并且 toggleClass 不做任何事情在我单击的 .btn 组上,但是单击它下面的 btn 组中的一个按钮也会改变上面的那个。我已经尝试过以艰难的方式做到这一点,使用嵌套 div 检查每个按钮是否根据其底层单选按钮的状态删除或添加了必要的类,但得到了相同的结果。我认为问题出在 Brothers() 上,但是任何人都知道如何在不遍历整个 DOM 寻找每个 .btn 的情况下完成这项工作?
【问题讨论】:
-
我不明白目标是什么。您正在寻找什么功能?
-
问题可能你用
toggleClass,顺便把attr改成prop -
用户单击 .btn,它会检查底层无线电输入,并将 .btn-warning 添加到该 .btn。 .btn-default 用于取消选中,.btn-warning 用于选中。
-
@5-T: 当我在那里使用 prop 时,它不会改变属性。
-
为什么要定位 btn div 而不是子标签元素?
标签: jquery toggleclass siblings