【问题标题】:Inclusive checkbox list (Automatically checking boxes below selected box)包含复选框列表(自动选中选中框下方的框)
【发布时间】:2013-08-22 01:21:04
【问题描述】:

我正在制作一个表单,其中包含用户可用的权限列表。每个权限都是一个复选框。 (因此,有一个复选框列表!)

权限是包容性的...列表的顶部元素可以访问自身以及它下面的元素。

我正在尝试使用表单 UI 对此进行建模。我希望复选框下方的复选框在选中它们上方的框时自动检查自己。

问题是我不知道如何使用 javascipt 或 jquery 来做到这一点。我可以在切换框时运行函数,但我不知道如何检查 DOM 中的以下框。


按钮的 HTML 代码:

<div class="account_edit">
  <a name="edit_permissions"><h2>Edit Permissions</h2></a>
  <form action="/admin/account-modify/permissions/" method="POST">
    <h3>Request permission change:</h3>
    <span>(all items below selected permission level are included)</span>

    <h4>Admin</h4>
    <input class="radio" type="checkbox" name="permission[]" value="0">manage users
    <br/>

    <h4>Manager</h4>
    <input class="radio" type="checkbox" name="permission[]" value="1">view users
    <br/>
    <input class="radio" type="checkbox" name="permission[]" value="2">view students
    <br/>

    <h4>Editor</h4>
    <input class="radio" type="checkbox" name="permission[]" value="3">manage new stories
    <br/>
    <input class="radio" type="checkbox" name="permission[]" value="4">manage videos
    <br/>
    <input class="radio" type="checkbox" name="permission[]" value="5">manage pictures
    <br/>

    <h4>Reporter</h4>
    <input class="radio" type="checkbox" name="permission[]" value="6">upload news stories
    <br/>
    <input class="radio" type="checkbox" name="permission[]" value="7">upload videos
    <br/>
    <input class="radio" type="checkbox" name="permission[]" value="8">upload pictures
    <br/>

    <h4>User</h4>
    <input class="radio" type="checkbox" name="permission[]" value="10">manage your account
    <br/>

    <input class="submit" type="submit" value="Request Change">
    <br/>
    <a class="cancel" href="#">cancel</a>
  </form>
</div>

【问题讨论】:

  • 你的问题是什么?你试过什么?你被困在哪里了?也请在您的问题中包含相关代码

标签: javascript jquery html forms checkbox


【解决方案1】:
$('input[type=checkbox]').change(function () {
    $(this).nextAll('input[type=checkbox]').prop('checked', this.checked);
});

这是小提琴:http://jsfiddle.net/xAxXK/


如果你想让你的代码更高效一点,你可以使用这个更长的 sn-p 并减少 DOM 遍历:

var checkboxes = $('input[type=checkbox]');

checkboxes.change(function () {

    var index = checkboxes.index(this);
    var isChecked = this.checked;

    checkboxes.each(function (i, el) {
        if ( i > index ) el.checked = isChecked;
    });
});

这是小提琴:http://jsfiddle.net/xAxXK/1/

【讨论】:

  • 太棒了!它唯一可以使用它取消选中以前的框。但除此之外,完美!
  • @NathanPetersen - 您使用的是哪个版本?我可以帮你解决这个问题。
  • @NathanPetersen - 给你:jsfiddle.net/xAxXK/2。同样,这可以提高效率,但如果您更喜欢这个解决方案的简洁性,那就去吧。
猜你喜欢
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多