全选全不选实现

参考廖雪峰JavaScript教程jQuery

index.html

<html>
<head>
    <meta charset="utf-8">
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
    <script src="index.js"></script>
</head>

<body>
    <!-- HTML结构 -->
    <form id="test-form" action="test">
        <legend>请选择想要学习的编程语言:</legend>
        <fieldset>
            <p><label class="selectAll"><input type="checkbox"></label> <a href="#0" class="invertSelect">反选</a></p>
            <p><label><input type="checkbox" name="lang" value="javascript"> JavaScript</label></p>
            <p><label><input type="checkbox" name="lang" value="python"> Python</label></p>
            <p><label><input type="checkbox" name="lang" value="ruby"> Ruby</label></p>
            <p><label><input type="checkbox" name="lang" value="haskell"> Haskell</label></p>
            <p><label><input type="checkbox" name="lang" value="scheme"> Scheme</label></p>
            <p><button type="submit">Submit</button></p>
        </fieldset>
    </form>
</body>

</html>

index.js

'use strict';

$(document).ready(function () {
    var form = $('#test-form'),
        langs = form.find('[name=lang]'),
        selectAll = form.find('label.selectAll :checkbox'),
        invertSelect = form.find('a.invertSelect');

    // 全选或全不选
    selectAll.click(function (e) {
        if (selectAll.is(":checked")) {
            langs.prop("checked", true);
        } else {
            langs.prop("checked", false);
        }
    });

    // 反选
    invertSelect.click(function (e) {
        langs.each(function (index) {
            $(this).prop("checked", !$(this).is(":checked"));
        });
        selectAll.prop("checked", isAllChecked());
    });

    // 各个选择框
    langs.click(function (e) {
        selectAll.prop("checked", isAllChecked());
    });

    // 判断是否全部选中
    function isAllChecked() {
        return langs.filter(":checked").length == langs.length;
    }
});

补充说明:

  1. 判断多选框是否选中的方法:
    var radio = $('#test-radio');
    radio.attr('checked'); // 'checked'
    radio.prop('checked'); // true
    radio.is(':checked'); // true
    类似的属性还有selected

  2. each接受的函数的第一个参数是index,函数中this是dom对象,不是jquery对象

  3. 利用过滤器判断是否全选

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • jQuery jQuery是JavaScript世界中使用最广泛的一个库。 jQuery这么流行,肯定是因为它解决...
    星腾_范特西阅读 6,409评论 0 27
  • Javascript缺点:1.复杂的文档对象模型 2.不一致的浏览器实现 3.缺乏便捷的开发、调试工具。 jque...
    baby熊_熊姐阅读 3,971评论 0 3
  • 一、样式篇 第1章 初识jQuery (1)环境搭建 进入官方网站获取最新的版本 http://jquery.co...
    凛0_0阅读 8,916评论 0 44
  • 一:认识jquery jquery是javascript的类库,具有轻量级,完善的文档,丰富的插件支持,完善的Aj...
    xuguibin阅读 5,645评论 1 7
  • jQuery基础(一)——样式篇 1-2环境搭建 1-3 jQuery HelloWorld体验 $(docume...
    croyance0601阅读 4,773评论 0 8

友情链接更多精彩内容