整合营销服务商

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

免费咨询热线:

multiple-select.js中手动设置全选和取消全选

multiple-select。这个组件风格简单、文档全、功能强大。multiple-select。这个组件风格简单、文档全、功能强大。但是觉得它选中的效果不太好。关于它的效果展示,我们放在后面。还是给出对应的文档API。 我们项目中因为需要多选的下拉列表select,因此找到了这个控件,但是有些需求需要能够设置多选的select一个初始值,开始找不到怎么实现,后来找了资料才发现其实很简单。

用法

首先引入需要的js文件和样式css文件。

<!-- 多选select-->



然后在页面html代码中定义一个多选的select控件



最重要的是需要在domcument载入的时候,初始化multiple-select的参数。



这样就可以允许为多选了,初始化select列表控件了。

问题

在项目中,有一个需求是在页面载入的时候,就要把select全部选中,也就是全选功能。但是找了一圈也没找到直接可以多选的方法,巴拉了半天的网站,也没有找到对应的方法。 最后只能在网站帮助文档中找到方法checkAll和uncheckAll方法描述,但是具体怎么使用没有demo了。

后来试了一圈,终于找到方法了。很简单,如下一句话代码解决。

解决方法


初始化的时候,增加一行代码,如下:

$("#accountList").multipleSelect('checkAll');

同于服务器端脚本语言,例如php与ASP,Javascript是客户端脚本语言,也就是说JavaScript是在用户的浏览器上运行,不需要服务器的支持而可以独立运行。所以在早期程序员比较青睐于JavaScript以减少对服务器的负担,而与此同时也带来另一个问题:安全性。而随着服务器的强壮,虽然程序员更喜欢运行于服务端的脚本以保证安全,但JavaScript仍然以其跨平台、容易上手等优势大行其道。

Web前端教程

复选框的全选和全不选

需求分析

商品分类界面中,当我们点击全选框的时候,我们希望选中所有的商品,当我们取消掉的时候,我们希望不选中所有的商品

技术分析

checked="checked"选择复选框

事件:onclick点击事件

getElementsByTagName:返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。

getElementsByName:返回包含带有指定类名的所有元素的节点列表。

步骤分析

全选和全部选步骤分析:

  1.确定事件:onclick单机事件

  2.事件触发函数:checkAll()

  3.函数要去做一些事情:

  获得当前第一个checkbox的状态

  获得所有分类项的checkbox

  修改每一个checkbox的状态

代码实现

  <!DOCTYPEhtml>

  <html>

   <head>

   <metacharset="UTF-8">

   <title></title>

   <!--

   1.确定事件:文档加载完成onload

   2.事件要触发函数:init()

   3.函数:操作页面的元素

   要操作表格中每一行

   动态的修改行的背景颜色

   -->

   <script>

   functioninit(){

   //得到表格

   vartab=document.getElementById("tab");

   //得到表格中每一行

   varrows=tab.rows;

   //便利所有的行,然后根据奇数偶数

   for(vari=1;i<rows.length;i++){

   varrow=rows[i];//得到其中的某一行

   if(i%2==0){

   row.bgColor="yellow";

   }else{

   row.bgColor="red"

   }

   }

   }  

   /*

全选和全部选步骤分析:

   1.确定事件:onclick单机事件

   2.事件触发函数:checkAll()

   3.函数要去做一些事情:

   获得当前第一个checkbox的状态

   获得所有分类项的checkbox

   修改每一个checkbox的状态

   */

   functioncheckAll(){

  // 获得当前第一个checkbox的状态

   varcheck1=document.getElementById("check1");

   //得到当前checked状态

   varchecked=check1.checked;

  // 获得所有分类项的checkbox

  // varchecks=document.getElementsByTagName("input");

   varchecks=document.getElementsByName("checkone");

  // alert(checks.length);

   for(vari=0;i<checks.length;i++){

  // 修改每一个checkbox的状态

   varcheckone=checks[i];

   checkone.checked=checked;

   }

   }

   </script>

   </head>

   <bodyonload="init()">

   <tableborder="1px"width="600px"id="tab">

   <tr>

   <td>

   <inputtype="checkbox"onclick="checkAll()"id="check1"/>

   </td>

   <td>分类ID</td>

   <td>分类名称</td>

   <td>分类商品</td>

   <td>分类描述</td>

   <td>操作</td>

   </tr>

   <tr>

   <td>

   <inputtype="checkbox"name="checkone"/>

   </td>

   <td>1</td>

   <td>手机数码</td>

   <td>华为,小米,尼康</td>

   <td>黑马数码产品质量最好</td>

   <td>

   <ahref="#">修改</a>|<ahref="#">删除</a>

   </td>

   </tr>

   <tr>

   <td>

   <inputtype="checkbox"name="checkone"/>

   </td>

   <td>2</td>

   <td>成人用品</td>

   <td>充气的</td>

   <td>这里面的充气电动硅胶的</td>

   <td><ahref="#">修改</a>|<ahref="#">删除</a></td>

   </tr>

   <tr>

   <td>

   <inputtype="checkbox"name="checkone"/>

   </td>

   <td>3</td>

   <td>电脑办公</td>

   <td>联想,小米</td>

   <td>笔记本特卖</td>

   <td><ahref="#">修改</a>|<ahref="#">删除</a></td>

   </tr>

   <tr>

   <td>

   <inputtype="checkbox"name="checkone"/>

   </td>

   <td>4</td>

   <td>馋嘴零食</td>

   <td>辣椒,麻花,黄瓜</td>

   <td>年货</td>

   <td><ahref="#">修改</a>|<ahref="#">删除</a></td>

   </tr>

   <tr>

   <td>

   <inputtype="checkbox"name="checkone"/>

   </td>

   <td>5</td>

   <td>床上用品</td>

   <td>床单,被套,四件套</td>

   <td>都是套子</td>

   <td><ahref="#">修改</a>|<ahref="#">删除</a></td>

   </tr>

   </table>

   </body>

  </html>

JavaScript是一种脚本语言,其源代码在发往客户端运行之前不需经过编译,而是将文本格式的字符代码发送给浏览器由浏览器解释运行。解释语言的弱点是安全性较差,而且在JavaScript中,如果一条运行不了,那么下面的语言也无法运行。而且由于每次重新加载都会重新解译,加载后,有些代码会延迟至运行时才解译,甚至会多次解译,所以速度较慢。

以上是酷仔今日整理的“前端教程:使用JavaScript完成复选框的全选和全不”一文,希望为正在学习Web前端的同学提供参考。

选框全选与全不选的实现

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

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

网页代码部分如下:

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

})

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