用自定义图片代替原生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 相关文章推荐
地震发生中逃生十大法则
May 12 Javascript
JavaScript Event学习第四章 传统的事件注册模型
Feb 07 Javascript
JQuery选择器特辑 详细小结
May 14 Javascript
JS中setTimeout()的用法详解
Apr 14 Javascript
js使用数组判断提交数据是否存在相同数据
Nov 27 Javascript
JavaScript简介
Feb 15 Javascript
AngularJS入门教程之迭代器过滤详解
Aug 18 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
Sep 18 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
Oct 17 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
Sep 01 jQuery
laypage+SpringMVC实现后端分页
Jul 27 Javascript
jQuery实现查看图片功能
Dec 01 jQuery
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 UTF8编码内的繁简转换类
2009/07/20 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
50个PHP程序性能优化的方法
2014/06/02 PHP
javascript 节点遍历函数
2010/03/28 Javascript
纯js实现背景图片切换效果代码
2010/11/14 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
JavaScript中的prototype和constructor简明总结
2014/04/05 Javascript
iScroll中事件点击触发两次解决方案
2015/03/11 Javascript
JavaScript实现自动变换表格边框颜色
2015/05/08 Javascript
实例讲解JavaScript中instanceof运算符的用法
2016/06/08 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
Vue-Router实现组件间跳转的三种方法
2017/11/07 Javascript
JavaScript原生实现观察者模式的示例
2017/12/15 Javascript
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
Vue项目开发常见问题和解决方案总结
2020/09/11 Javascript
[01:51]开启你的城市传奇 完美世界城市挑战赛开始报名
2018/10/09 DOTA
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
简述Python中的进程、线程、协程
2016/03/18 Python
Django admin美化插件suit使用示例
2017/12/12 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
详解【python】str与json类型转换
2019/04/29 Python
Python socket聊天脚本代码实例
2020/01/02 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
2020/07/03 Python
Python语言编写智力问答小游戏功能
2020/10/13 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
瑞士领先的网上超市:LeShop.ch
2018/11/14 全球购物
机械专业个人求职自荐信格式
2013/09/21 职场文书
如何写股份合作协议书
2014/09/11 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
Redis Stream类型的使用详解
2021/11/11 Redis