整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

一行jQuery代码搞定checkbox 全选和全不选

网站建设中;

让复选框全部选中和全部取消是比较常用的;

下面就介绍如何用一句话搞定全选功能;

其实很简单;

代码在下面;

JavaScript部分:

function checkAll(obj){
 $("#box input[type='checkbox']").prop('checked', $(obj).prop('checked'));
}

html部分:

选框全选与全不选的实现

多选框全选与全不选是前端开发人员必学的案例了,这里完成了以下需求:

  • 当用户勾上“全选”时,自动选中所有语言,并把“全选”变成“全不选”;
  • 当用户去掉“全不选”时,自动不选中所有语言;
  • 当用户点击“反选”时,自动把所有语言状态反转(选中的变为未选,未选的变为选中);
  • 当用户把所有语言都手动勾上时,“全选”被自动勾上,并变为“全不选”;
  • 当用户手动去掉选中至少一种语言时,“全不选”自动被去掉选中,并变为“全选”。

网页代码部分如下:

<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>

先获取dom元素

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');

全选与全不选实现起来很简单,利用jquery对象的prop方法来设置选中状态,需要注意的是这里不能使用attr()方法:

 // 全选与全不选
        selectAll.on("change",()=>{
            if(selectAll.prop("checked")) {
                //全选
                langs.prop("checked",true)
                selectAllLabel.hide()
                deselectAllLabel.show()
            }else{
                // 全不选
                langs.prop("checked",false)
                selectAllLabel.show()
                deselectAllLabel.hide()
            }
            
        })

反选的方法也很简单:

        invertSelect.on("click",()=>{
            //jquery对象要先使用Array.from方法转换成数组,利用数组来遍历
            //需要注意的是,遍历的每一个元素是dom对象,而不是jquery对象了,
            //不能再使用prop方法了
            Array.from(langs).forEach(item=>item.checked=!item.checked)
        })

当用户把所有语言都手动勾上时,“全选”被自动勾上,并变为“全不选”。实现这个需求,需要让change事件绑定所有的name为lang的checkbox对象(langs),事件触发时,要遍历所有的langs,如果全部为选中状态,则“全选”自动勾上,并变为“全不选”。这里获取所有的选中状态的checkbox,可以使用 $('[name=lang]:checked'),代码如下:

    var langsChecked = $('[name=lang]:checked')
     //如果选中的checkbox数量大于等于5,即是全部选中
    if(langsChecked.length>=5){
        //全选打勾
        selectAll.prop("checked",true)
        //全选标签隐藏
        selectAllLabel.hide()
        //全不选标签显示
        deselectAllLabel.show()
    }else{
        //全选去掉勾
        selectAll.prop("checked",false)
        //全选标签显示
        selectAllLabel.show()
        //全不选标签隐藏
        deselectAllLabel.hide()
    }

为避免与之前的代码显示冲突,这里封装为一个方法,前面的代码也需要使用该方法,完整代码如下:

 $(function(){
    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');

        // 全选与全不选
        selectAll.on("change",()=>{
            if(selectAll.prop("checked")) {
                //全选
                langs.prop("checked",true)
                selectAllLabel.hide()
                deselectAllLabel.show()
            }else{
                // 全不选
                langs.prop("checked",false)
                selectAllLabel.show()
                deselectAllLabel.hide()
            }
            select()
        })
        //反选
        invertSelect.on("click",()=>{
            //jquery对象要先使用Array.from方法转换成数组,利用数组来遍历
            //需要注意的是,遍历的每一个元素是dom对象,而不是jquery对象了,
            //不能再使用prop方法了
            Array.from(langs).forEach(item=>item.checked=!item.checked)
            select()
        })
        //当用户把所有语言都手动勾上时,“全选”被自动勾上,并变为“全不选”;
        //当用户手动去掉选中至少一种语言时,“全不选”自动被去掉选中,并变为“全选”。
        function select(){
            var langsChecked = $('[name=lang]:checked')
            console.log(langsChecked)
            //如果选中的checkbox数量大于等于5,即是全部选中
            if(langsChecked.length>=5){
                selectAll.prop("checked",true)
                selectAllLabel.hide()
                deselectAllLabel.show()
            }else{
                selectAll.prop("checked",false)
                selectAllLabel.show()
                deselectAllLabel.hide()
            }
        }

        langs.change(select)

})

如有疑问,欢迎在评论区留言。

店铺复制新版运费模板

一、提 取 运 费 模 板 代 码

1、打开店铺,复制链接https://freighttemplate.aliexpress.com/wsproduct/freight/freightTemplateList.htm?spm=5261.newworkbench.aenewheader.6.32e93e5fAZ02G2 回归老版运费模板,找到需要复制的运费模板:


2、点编辑,按F12,然后Ctrl+F 输入economy-logistics-panel,右键点击此行代码,并点击 Edit as Html



全选这个方框里面的东西,复制出来保留为txt文本命名为economy-logistics-panel,如果物流模板没有更新,这个文件就持续使用


3、一共需要复制经济类(economy-logistics-panel)、简易类(simple-logistics-panel)、标准类(standard-logistics-panel)、快速类(express-logistics-panel)、其他物流(other-logistics-panel)这5个版块的代码,复制好的代码分别粘贴到5个txt文本文件里。


4、第一步提取运费模板代码工作完成!


二、跨 店 铺 复 制 运 费 模 板

1、打开需要复制运费模板的店铺,复制链接:https://freighttemplate.aliexpress.com/wsproduct/freight/freightTemplateList.htm?spm=5261.newworkbench.aenewheader.6.32e93e5fAZ02G2


2、进入老版运费模板编辑,新建一个运费模板,输入运费模板名字(不能中文)按F12,再按Ctrl+F 输入economy-logistics-panel,右键点击Editas Html,分别用之前复制好的代码去替换,经济类、简易类、标准类、快速类和其他类物流这5个板块的代码,(每次复制目的代码进去,一定要点一个代码栏的空白地方)。




全选方框内容,用之前保留的文本替换

再按一次F12,关闭代码,查看模板是否有更新


3、替换好后,点击左边保存按钮。有时候可能要多点几次保存。