У меня есть 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 div в «btn-group» у меня есть этот 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, проверяющих, удалены или добавлены ли необходимые классы для каждой кнопки в зависимости от состояния ее основного переключателя, но получил тот же результат. Я думаю, что проблема связана с siblings(), но у кого-нибудь есть идеи, как заставить это работать, не просматривая всю DOM в поисках каждого .btn?
toggleClass
, кстати, изменитеattr
наprop
- person 5z- -   schedule 18.11.2013