用自定义图片代替原生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 相关文章推荐
JS启动应用程序的一个简单例子
May 11 Javascript
javascript 运算数的求值顺序
Aug 23 Javascript
使用phantomjs进行网页抓取的实现代码
Sep 29 Javascript
js的回调函数详解
Jan 05 Javascript
JavaScript动态修改网页元素内容的方法
Mar 21 Javascript
Angularjs 滚动加载更多数据
Mar 17 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
Aug 08 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
May 23 Javascript
jQuery实现的简单获取索引功能示例
Jun 04 jQuery
js实现继承的方法及优缺点总结
May 08 Javascript
Laravel admin实现消息提醒、播放音频功能
Jul 10 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
Aug 03 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
php设计模式 Observer(观察者模式)
2011/06/26 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
菜鸟javascript基础整理1
2010/12/06 Javascript
js过滤HTML标签以及空格的思路及代码
2013/05/24 Javascript
javascript中数组中求最大值示例代码
2013/12/18 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
javascript验证手机号和实现星号(*)代替实例
2016/08/16 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
react实现pure render时bind(this)隐患需注意!
2017/03/09 Javascript
node中Express 动态设置端口的方法
2017/08/04 Javascript
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
jQuery实时统计输入框字数及限制
2020/06/24 jQuery
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
Django框架下在视图中使用模版的方法
2015/07/16 Python
详解Python中的__new__、__init__、__call__三个特殊方法
2016/06/02 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
python实现静态web服务器
2019/09/03 Python
使用python实现哈希表、字典、集合操作
2019/12/22 Python
Python读取csv文件实例解析
2019/12/30 Python
Python3爬虫中识别图形验证码的实例讲解
2020/07/30 Python
浅谈python锁与死锁问题
2020/08/14 Python
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
综合素质的自我鉴定
2013/10/07 职场文书
公司面试感谢信
2014/02/01 职场文书
网络教育自我鉴定
2014/02/04 职场文书
元旦活动感言
2014/03/08 职场文书
小学生六年级作文之关于感恩
2019/08/16 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang