工作中遇到了一个下拉需要实现checkbox的效果,如下图

或许网上已经有实现了,但简单的功能自己实现就好了,

结构

  1. <div class="form-control-wrap">
  2. <div class="form-item-inputcheckbox">
  3.  
  4. </div>
  5. </div>

样式,这里使用scss编写

  1. .form-item-inputcheckbox{
  2. .form-checkbox-label{
  3. margin-bottom: 4px;margin-right: 16px;
  4. input{
  5. vertical-align: top;margin-right: 4px;
  6. }
  7. }
  8. .form-item-input{
  9. -ms-text-overflow: ellipsis;
  10. text-overflow: ellipsis;
  11. white-space: nowrap;
  12. overflow: hidden;
  13. }
  14. .form-item-checkboxwrap{
  15. margin:;background: #fff;border:1px solid #66afe9;padding: 10px;
  16. max-height: 150px;overflow-y: auto;position: absolute;width: 100%;
  17. display: none;z-index:;
  18. }
  19. .form-item-line {
  20. font-weight: normal;
  21. padding: 0 4px;
  22. }
  23. }

下面是脚本,比较少写jQuery的插件,写法可能不够地道,不足之处忘指出

  1. ~(function ($) {
  2. var __root;
  3. var checkItemTpl = '<label class="form-checkbox-label">'+
  4. "<input type='checkbox' value='${value}' text='${text}' ${check}>${text}"+
  5. '</label>';
  6.  
  7. function template(str, data, regexp) {
  8. return str.replace(regexp || /\${([^{}]*)}/g, function (str, p1) {
  9. return (data[p1]!==undefined&&data[p1]!==null&&data[p1].toString())||"";
  10. });
  11. }
  12. function rander() {
  13. __root.html('<div class="form-control form-item-input"></div><div class="form-item-checkboxwrap checkbox"></div>');
  14. var texts = '',valHtmls = [],datas = [];
  15. $.each(__data, function(index, val) {
  16. val.check= val.checked ?'checked':'';
  17. texts += template(checkItemTpl,val);
  18. if(val.checked){
  19. valHtmls.push(val.text);
  20. datas.push(val.value);
  21. }
  22. });
  23. __root.find('.form-item-checkboxwrap').html(texts);
  24. renderInput(__root.find('.form-item-input'),valHtmls,datas);
  25. }
  26. function renderInput(input,texts,datas) {
  27. input.html(texts.join(';')).attr('title',texts.join(';'))
  28. .val(datas.join(';')).data('value', datas).data('text', texts);
  29. }
  30. function ctrl() {
  31. var $selectWrap = __root.find('.form-item-checkboxwrap');
  32. __root.click(function(e) {
  33. $(this).find('.form-item-checkboxwrap').show();
  34. e.stopPropagation();
  35. });
  36. __root.find('input').click(function () {
  37. var __input = $(this).parents('.form-item-checkboxwrap').siblings('.form-item-input');
  38. var val = $(this).val(),
  39. text = $(this).attr('text'),
  40. datas = __input.data('value'),
  41. texts = __input.data('text');
  42. if($(this)[0].checked){
  43. datas.push(val);
  44. texts.push(text);
  45.  
  46. }else{
  47. var i = datas.indexOf(val);
  48. datas.splice(i,1);
  49. texts.splice(i,1);
  50. }
  51. renderInput(__input,texts,datas);
  52. });
  53. $('body').click(function() {
  54. $selectWrap.hide();
  55. });
  56. }
  57. $.fn.selectCheckbox = function(option){
  58. __root = $(this);
  59. __data = option.data;
  60. rander();
  61. ctrl();
  62. }
  63. })(jQuery)

调用脚本

  1. var values = [{
  2. checked: true,
  3. text: "男",
  4. value: "male"
  5. }, {
  6. checked: true,
  7. text: "女",
  8. value: "female"
  9. }, {
  10. checked: false,
  11. text: "未知",
  12. value: "unknown"
  13. }];
  14. $('.form-item-inputcheckbox').selectCheckbox({data:values});

生成的效果:

取出数据的时候已经选择的数据时候需要调用

  1. $('.form-item-input').data()

实现浏览器遗漏的原件 jQuery.selectCheckbox的更多相关文章

  1. 在火狐、360等浏览器中,用jquery创建表单并发送的问题

    某些浏览器无法使用js或者jquery直接创建表单并发送,这是由于这些浏览器在提交页面表单时要求页面有完整的标签项即<html><head><title></ ...

  2. 深入浏览器兼容 细数jQuery Hooks 属性篇

    关于钩子:http://www.cnblogs.com/aaronjs/p/3387906.html 本章的目的很简单,通过钩子函数更细节的了解浏览器差异与处理方案, 版本是2.0.3所以不兼容ie6 ...

  3. 浏览器下载/导出文件 及jQuery表单提交

    1 比如以下按钮, 用于导出文件,如EXCEL文件. <li> <button class="whiteBg btn2" onclick="doExp( ...

  4. 能跨域和跨浏览器的flashcookie for jquery插件

    对于写网站时需要跨域和跨浏览器的可以看看这个. 引入jquery  和 swfstore.min.js 就可以了,蛮简单好用的,会jquery基础就可以咯. mySwfStore.set('myKey ...

  5. pasteimg浏览器中粘贴图片jQuery插件

    pasteimg是一款可以在浏览器中实现图片粘贴的jQuery插件,兼容Chrome.Firefox.IE11以及其他使用这些内核的浏览器,比如,国内著名的360浏览器. pasteimg可以识别浏览 ...

  6. chrome浏览器模拟手机端:jquery click()点击无效解决方法

    $(".sku-wrap .ok").click(); chrome浏览器模拟手机端,在油猴插件中写JS代码,然后发现click()点击失效. 解决方法:jquery的click( ...

  7. 浏览器console中加入jquery,测试选择元素

    一.chrome浏览器F12打开调试界面,在console中输入(firefox同样可以): var jquery = document.createElement('script'); jquery ...

  8. 浏览器后退按钮导致jquery动态添加的select option值丢失的解决方法

    监控浏览器返回功能 判断浏览器返回功能 禁用浏览器的后退按钮 JS禁止浏览器后退键 http://volunteer521.iteye.com/blog/830522/ 浏览器返回功能 判断上一页面来 ...

  9. 浏览器console中加入jquery方便调试

    var jquery = document.createElement('script'); jquery.src = "http://apps.bdimg.com/libs/jquery/ ...

随机推荐

  1. mmc一维下料测试

    另一组数据, 长度 = 6000; 切割长度 = {1664, 1599, 1552, 1409, 1352, 802, 660}; 需求数量 = {32, 96, 160, 16, 384, 112 ...

  2. MFC基础类源码CPP实现文件

    WinMain.CPP---->AfxWinMain()  //近似可认为是WinMain()函数的入口 VIEWCORE.CPP---->CView DOCCORE.CPP----> ...

  3. IT忍者神龟之Java动态代理与CGLib代理

    <br>public class UserDAOImpl{ <br><br>    public void save() { <br>        / ...

  4. for语句之打印三角形问题

    1.左下角直角三角形 Console.Write("请输入要打印几行:"); int a = Convert.ToInt32(Console.ReadLine()); ; i &l ...

  5. centos 内网ip访问mysql数据库

    参考博文: CentOS 配置mysql允许远程登录 Centos6.5 双网卡配置一个上外网一个接局域网  这个博文仅作参考 公司租用景安的服务器,给景安沟通配置内网. [root@bogon ng ...

  6. WPF中StringFormat 格式化 的用法

    原文 WPF中StringFormat 格式化 的用法 网格用法 <my:DataGridTextColumn x:Name="PerformedDate" Header=& ...

  7. PHP用CURL或fsockopen伪造IP和来路(referer)

    URL是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 CURL库. 我们可以用CURL来伪造IP和来路,例子:1.php 请求 ...

  8. 基于visual Studio2013解决算法导论之023队列实现(基于数组)

     题目 基于数组的队列 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #i ...

  9. 达内TTS6.0课件basic_day05

  10. C++ 中mallon动态分配内存大小用法

    #include<iostream> using namespace std; int main(){ char *s; int n; cin>>n; s= (char *) ...