【问题标题】:jQuery siblings, toggleClass affecting other divsjQuery 兄弟,toggleClass 影响其他 div
【发布时间】: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


【解决方案1】:

试试

jQuery(function ($) {
    $(".btn").click(function (e) {
        if (!$(this).find("input").is(':checked') || !$(this).is('.btn-warning')) {
            $(this).find("input").prop('checked', true);
            $(this).siblings().addBack().toggleClass('btn-default btn-warning');
        }
    });
});

演示:Fiddle

更新:

第二个问题与单选按钮的重复 ID 有关,您有多个 ID 为 private_checkpubli_check 的元素,并且相应的 label 具有 for 属性集,这是问题的原因将 id 更改为 private_check&lt;n&gt;public_check&lt;n&gt;,以便只有一个具有特定 ID 的元素。

<label for="private_check1">Private</label>
<input type="radio" id="private_check1" class="privacy_check" name="privacy[real_name_privacy]" value=0 checked="checked" />

【讨论】:

  • 这仍然与我已经遇到的问题相同:更改第二组按钮上的按钮状态也会更改顶部的按钮状态,这不是我想要的。此外,它总是会更改第一组按钮;如果我在该页面上的第三组按钮上选择 on,它会更改该组和第一组,但不会更改第二组。
  • 我认为你有钱(回复:更新)。我已经编辑了前几个,至少可以在不影响其他 div 的情况下使输入切换正常工作。但这似乎是问题所在。谢谢!
【解决方案2】:

这是你想要的吗?

$(".btn").click(function() {
   $(this).find("input").prop('checked', true);
   $(this).siblings().find("input").prop('checked', false);
   $(this).addClass('btn-warning btn-default');
   $(this).siblings().removeClass('btn-default btn-warning');
});

【讨论】:

  • 不。当我单击第二个或第三个等时,仍然会更改第一组按钮。
  • 谢谢,但仍然在做同样的事情,这就是为什么我认为兄弟姐妹是问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
相关资源
最近更新 更多