用自定义图片代替原生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 相关文章推荐
JQuery Tips(2) 关于$()包装集你不知道的
Dec 14 Javascript
javascript基础知识大集锦(一) 推荐收藏
Jan 13 Javascript
node.js中的fs.rename方法使用说明
Dec 16 Javascript
jQuery实现带玻璃流光质感的手风琴特效
Nov 20 Javascript
JS获取input file绝对路径的方法(推荐)
Aug 02 Javascript
关于JS中二维数组的声明方法
Sep 24 Javascript
JavaScript自定义文本框光标
Mar 05 Javascript
通过构造函数实例化对象的方法
Jun 28 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
Jan 12 Javascript
微信小程序自定义弹窗wcPop插件
Nov 19 Javascript
Vue 子组件与数据传递问题及注意事项
Jul 11 Javascript
小程序使用watch监听数据变化的方法详解
Sep 20 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小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
Ajax 数据请求的简单分析
2011/04/05 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
四种参数传递的形式——URL,超链接,js,form表单
2015/07/24 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
2017/05/20 jQuery
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
原生JS实现的双色球功能示例
2018/02/02 Javascript
vue+axios新手实践实现登陆的示例代码
2018/06/06 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
2019/02/28 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
Vue中实现回车键切换焦点的方法
2020/02/19 Javascript
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
整理Python中的赋值运算符
2015/05/13 Python
Python selenium文件上传方法汇总
2020/11/19 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
linux安装python修改默认python版本方法
2019/03/31 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
Python进程池Pool应用实例分析
2019/11/27 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
python dataframe NaN处理方式
2019/12/26 Python
使用python创建Excel工作簿及工作表过程图解
2020/05/27 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
eharmony澳大利亚:网上约会服务
2020/02/29 全球购物
《小松树和大松树》教学反思
2014/02/20 职场文书
企业家王石演讲稿:坚持与放下
2014/04/27 职场文书
检讨书1000字
2014/10/11 职场文书
质量保证书格式模板
2015/02/27 职场文书
遗失证明范文
2015/06/19 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript
JavaScript最完整的深浅拷贝实现方式详解
2022/02/28 Javascript