2018-09-13 点击事件处理函数练习

<form id="test-form" action="test">

    <legend>请选择想要学习的编程语言:</legend>

    <fieldset>

        <p><label class="selectAll"><input type="checkbox"> <span class="selectAll">全选</span><span class="deselectAll">全不选</span></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>

绑定合适的事件处理函数,实现以下逻辑:

当用户勾上“全选”时,自动选中所有语言,并把“全选”变成“全不选”;

当用户去掉“全不选”时,自动不选中所有语言;

当用户点击“反选”时,自动把所有语言状态反转(选中的变为未选,未选的变为选中);

当用户把所有语言都手动勾上时,“全选”被自动勾上,并变为“全不选”;

当用户手动去掉选中至少一种语言时,“全不选”自动被去掉选中,并变为“全选”。

'use strict';

var

    form = $('#test-form'),

    langs = form.find('[name=lang]'),

    selectAll = form.find('label.selectAll :checkbox'),

    selectAllLabel = form.find('label.selectAll span.selectAll'),

    deselectAllLabel = form.find('label.selectAll span.deselectAll'),

    invertSelect = form.find('a.invertSelect');

// 重置初始化状态:

form.find('*').show().off();

form.find(':checkbox').prop('checked', false).off();

deselectAllLabel.hide();

// 拦截form提交事件:

form.off().submit(function (e) {

    e.preventDefault();

    alert(form.serialize());

});

//全选按钮逻辑:监听状态改变,是否被选择:若被选择,隐藏全选按钮,显示全不选按钮,并设置checked = “checked”

selectAll.change(function(){

  $(this).is(':checked') ? deselectAllLabel.show() && selectAllLabel.hide() : deselectAllLabel.hide() && selectAllLabel.show();

  langs.prop('checked', $(this).is(':checked'));

});

langs改变,判断是否满足全选

langs.change(function(){

  langs.filter(':checked').length === langs.length ? selectAll.prop('checked', true) && deselectAllLabel.show() && selectAllLabel.hide() : selectAll.prop('checked', false) && deselectAllLabel.hide() && selectAllLabel.show();

});

反选绑定点击事件,非checked改为checked

invertSelect.click(function(){

  langs.each(function(){

.prop( propertyName, value ) value取 true or false 前面加!取相反

    $(this).prop('checked', !$(this).is(':checked'));

  });

  langs.filter(':checked').length === langs.length ? selectAll.prop('checked', true) && deselectAllLabel.show() && selectAllLabel.hide() : selectAll.prop('checked', false) && deselectAllLabel.hide() && selectAllLabel.show();

});

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 6,148评论 0 2
  • //------------------------- 第一章 认识JQuery ----------------...
    米塔塔阅读 4,062评论 0 9
  • 100个常用的javascript函数 1、原生JavaScript实现字符串长度截取 复制代码代码如下: fun...
    老头子_d0ec阅读 2,812评论 0 0
  • 找到fullcalendar.js, 找到代码为 isRTL:false,这句话 输入以下几句 monthName...
    迷你小小白阅读 5,636评论 0 1
  • 郑先生和同事约好一起去红花山散步,我们在家吃了早餐,洗了衣服就坐公交车来到红花山。 在这儿晨练的人可真不少,真羡慕...
    简宁思静阅读 1,163评论 0 0