用自定义图片代替原生checkbox实现全选,删除以及提交的方法


Posted in Javascript onOctober 18, 2016

UI妹子觉得原生的checkbox复选框太丑,非要用图片来代替,那就依她。做出来的效果类似这样:

用自定义图片代替原生checkbox实现全选,删除以及提交的方法

要代替原生的checkbox。 那么要实现原生checkbox能干的事。我们主要实现这几点就可以了。

1.点击列表中的勾选图片。图片会变换成相反的。

2.如果当前是全选状态,不勾选列表中的某一项,全选处的图片变成未勾选的状态。

如果点击了某一项使列表成了全选的状态, 全选处的图片变成勾选状态。

3.全选功能

4.点击删除,能删除全部的勾选的图片。

1.准备工作:因为要大量用到两个图片的切换,我们单独定义出来:

var uncheckUrl = 'images/uncheck.png'; 
var checkUrl = 'images/check.png';

2.点击列表中的勾选图片,图片变成相反的,并且可能引发 全选图片的变化。

我们用on事件,因为列表中的信息是动态添加进去的。

//点击复选框图片 
$("#ul").on('click', 'li img', function(event) { 
 
  var imgDom = $(this); 
 
  if(imgDom.attr("src")==checkUrl){ 
    $("#SelectAllImg").attr("src",uncheckUrl); 
    imgDom.attr("src",uncheckUrl); 
  }else{ 
    imgDom.attr("src",checkUrl); 
 
    //上面部分是变换图片自身,下面部分是检测是否要变换全选图片。 
    //通过比较图片总数量与选中图片数量来决定。 
    var imgLength = $('#ul li img').length; 
    var checkLength = 0; 
 
    for (var i = 0; i <= imgLength; i++) { 
      if($('#ul li img').eq(i).attr("src") == checkUrl){ 
        checkLength ++; 
      } 
    } 
 
    if(imgLength == checkLength){ 
      $("#SelectAllImg").attr("src",checkUrl);   
    } 
  } 
});

3.全选功能。改变全选图标的同时,改变所有图标,跟全选图标保持一致。

//全选中的图标 
$("#SelectAllImg").click(function() { 
  if($(this).attr("src")== checkUrl){ 
 
    $(this).attr("src",uncheckUrl); 
    $("#ul li img").attr("src",uncheckUrl); 
  }else{ 
    $(this).attr("src",checkUrl); 
    $("#ul li img").attr("src",checkUrl); 
  } 
});

4.删除功能。 点删除按钮,删除勾选的图片所在的行。 

注意:里面的循环是倒序循环。 这样处理的原因是:如果顺序循环,那么删除了前面的行,真实的imglength就变小了,所有后面的节点的索引值都发生了变化,往前移了, 而我们 eq(i)来删除序号为i的节点,就删除不到了。

//删除选中的数据 
$("#del").click(function() { 
 
  var imgLength = $('#ul li img').length; 
  var checkDom = ''; 
 
  for (var i = imgLength - 1; i >= 0; i--) { 
    checkDom = $('#ul li img').eq(i); 
    if(checkDom.attr("src") == checkUrl){ 
      checkDom.parent().remove(); 
    }; 
  }; 
 
});

5.最后我们要提交表单的时候,如何处理呢?  我们是用ajax提交还是直接表单submit提交呢?
这里提供两种方案的思路。

5.1 ajax思路,本人比较喜欢用ajax提交。

类似这样,deviceIdArr就获取到了选中的框的 内容。 你要获取该列的id,也类似。

var deviceIdArr = []; 
$('#ul li img').each(function() { 
  if($(this).attr('src') == checkUrl){ 
    deviceid = trim($(this).parent().text()); 
    deviceIdArr.push(deviceid); 
  } 
});

5.2表单提交思路。

在每一个图片checkbox的旁边,放上一个隐藏的真实checkbox。这样用户就看不到。

每一次对选中图片进行修改的时候,都对应地修改相应隐藏checkbox的选中状态,

最后提交的时候直接提交隐藏checkbox的状态就好。

调试的时候可以让那些隐藏的checkbox显现出来,方便我们直观看到checkbox与图片的对应状态是否准确。

6.一点优化意见。为了避免 第一次 点击 图片时 切换图片的延迟感,可 预加载 选中状态的图片 和 未选中状态的图片。 

比如我们这个默认状态下会显示未选中的图标, 而选中状态的图标是没有显示的。 如果等点击的时候再来加载,就会有延迟感。

解决办法,在页面底部加上这一句:

<img src="images/check.png" style="display:none;">

当然,也可以用CSSSprites精灵图。

注:本文是使用了jQuery来用自定义图片代替原生checkbox复选框实现全选,删除,表单提交。

换成原生JavaScript也不难。

以上就是小编为大家带来的用自定义图片代替原生checkbox实现全选,删除以及提交的方法全部内容了,希望大家多多支持三水点靠木~

Javascript 相关文章推荐
关于JavaScript中原型继承中的一点思考
Jul 25 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
Sep 09 Javascript
微信小程序 跳转传递数据的实例
Jul 06 Javascript
在Vue中如何使用Cookie操作实例
Jul 27 Javascript
jquery实现左右轮播切换效果
Jan 01 jQuery
在Vue组件中使用 TypeScript的方法
Feb 28 Javascript
Vue项目数据动态过滤实践及实现思路
Sep 11 Javascript
JavaScript设计模式之责任链模式实例分析
Jan 16 Javascript
用js简单提供增删改查接口
May 12 Javascript
javascript实现商品图片放大镜
Nov 28 Javascript
微信小程序实现签字功能
Dec 23 Javascript
详解vue 组件的实现原理
Nov 12 Javascript
jquery中用jsonp实现搜索框功能
Oct 18 #Javascript
JavaScript排序算法动画演示效果的实现方法
Oct 18 #Javascript
浅谈js的异步执行
Oct 18 #Javascript
Jquery AJAX POST与GET之间的区别详细介绍
Oct 17 #Javascript
微信小程序 教程之模块化
Oct 17 #Javascript
微信小程序 教程之注册页面
Oct 17 #Javascript
微信小程序 教程之注册程序
Oct 17 #Javascript
You might like
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
关于laravel 子查询 &amp; join的使用
2019/10/16 PHP
jquery 得到当前页面高度和宽度的两个函数
2010/02/21 Javascript
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
JQuery live函数
2010/12/24 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
JS同步、异步、延迟加载的方法
2018/05/05 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
JavaScript组合模式---引入案例分析
2020/05/23 Javascript
ReactRouter的实现方法
2021/01/25 Javascript
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
Python中操作符重载用法分析
2016/04/29 Python
在Python中实现替换字符串中的子串的示例
2018/10/31 Python
python3.6数独问题的解决
2019/01/21 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
计算机本科生自荐信
2013/10/15 职场文书
信息专业本科生个人的自我评价
2013/10/28 职场文书
2014全国两会大学生学习心得体会
2014/03/10 职场文书
群众路线教育实践活动思想汇报(2014特荐篇)
2014/09/16 职场文书
心得体会格式及范文
2016/01/25 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
导游词之澳门玫瑰圣母堂
2019/12/03 职场文书
MySQL中使用or、in与union all在查询命令下的效率对比
2021/05/26 MySQL
Windows server 2016服务器基本设置
2022/08/14 Servers