【Javascript】Js动态生成checkbox(使用Json数据)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>根据Json动态生成checkbox</title>

    <style type="text/css">

        body {
            margin: 0 auto;
        }

        #show {
            margin: 10px auto;
            width: 450px;
            font-size: 14px;
        }

        .content {
            float: left;
            width: 450px;
            margin: 10px 0px 20px 10px;
        }

        .bigfont {
            font-size: 14px;
        }

        .la {
            float: left;
            width: 50px;
            height: 20px;
            margin: 5px 0;
            line-height: 20px;
        }

        .la input {
            float: left;
        }

        .la span {
            float: left;
            line-height: 20px;
        }

    </style>

    <script type="text/javascript" src="../../libs/jquery/jquery-1.11.2.min.js"></script>

    <script type="text/javascript">

        window.onload = function () {
            var years = ["2013", "2014"];
            var months = {
                "2013": [12, 11, 10, 9, 8, 7],
                "2014": [6, 5, 4, 3, 2, 1]
            };
            var yearMonth = [years, months];
            genCheck(yearMonth);
        }

        function genCheck(yearMonth) {
            var content = "content";
            var checkText = "checkbox";
            var link = "link";
            var size;

            $("#show").html("");

            var years = yearMonth[0];
            size = years.length;
            for (var i = 0; i < years.length; i++) {
                genShowContent("show", checkText + i, i, years[i] + "年", content + i);
            }
            var monthObj = yearMonth[1];

            for (var i = 0; i < years.length; i++) {
                var array = monthObj["" + years[i] + ""];
                for (var j = 0; j < array.length; j++) {
                    genCheckBox(content + i, link + i, array[j], array[j] + "月", i, false);
                }

                var flag = isAllCheck(link + i);
                var box = document.getElementById(checkText + i);
                if (flag) {
                    box.checked = true;
                } else {
                    box.checked = false;
                }
                $("input[name=" + link + i + "]").each(function () {
                    $(this).unbind();
                    $(this).change(function () {
                        var flag = isAllCheck($(this).attr("name"));
                        var box = document.getElementById(checkText + $(this).attr("parentIndex"));
                        if (flag) {
                            box.checked = true;
                        } else {
                            box.checked = false;
                        }
                    });
                });
            }
            for (var i = 0; i < size; i++) {
                $("#" + checkText + i).unbind();
                $("#" + checkText + i).change(function () {
                    var temp = link + $(this).attr("index");
                    var p = document.getElementById(checkText + $(this).attr("index"));
                    var box = document.getElementsByName(temp);
                    for (var j = 0; j < box.length; j++) {
                        if (p.checked) {
                            box[j].checked = true;
                        } else {
                            box[j].checked = false;
                        }
                    }
                });
            }
        }

        function genCheckBox(id, name, value, showText, parentIndex, isCheck) {
            if (!isCheck) {
                var checkbox = "<div class='la'><input type='checkbox' parentIndex=" + parentIndex + " name=".concat(name).concat(" value=").concat(value).concat(" alt=").concat(showText).concat(" /><span>").concat(showText).concat("</span></div>");
                $("#" + id).append(checkbox);
            } else {
                var checkbox = "<div class='la'><input type='checkbox' parentIndex=" + parentIndex + " name=".concat(name).concat(" checked='checked' value=").concat(value).concat(" alt=").concat(showText).concat(" /><span>").concat(showText).concat("</span></div>");
                $("#" + id).append(checkbox);
            }
        }

        function genShowContent(id, checkboxId, index, showText, idName) {
            var showContent = "<div class='msg'><span class='bigfont'>".concat(showText).concat(": </span><input type='checkbox' index=").concat(index).concat(" id='").concat(checkboxId).concat("'/><span>全选</span><div class='content' id='").concat(idName).concat("' ></div></div>");
            $("#" + id).append(showContent);
        }

        function isAllCheck(name) {
            var box = document.getElementsByName(name);
            for (var j = 0; j < box.length; j++) {
                if (!box[j].checked) {
                    return false;
                }
            }
            return true;
        }
    </script>
</head>
<body>
<div class="show" id="show"></div>
</body>
</html>

演示地址:http://zhangjikai.tk/demo/html/checkbox.html

时间: 2024-10-13 10:34:52

【Javascript】Js动态生成checkbox(使用Json数据)的相关文章

爬虫案例(js动态生成数据)

需求:爬取https://www.xuexi.cn/f997e76a890b0e5a053c57b19f468436/018d244441062d8916dd472a4c6a0a0b.html页面中的新闻数据. 分析: 1.首先通过分析页面会发现该页面中的新闻数据都是动态加载出来的,并且通过抓包工具抓取数据可以发现动态数据也不是ajax请求获取的动态数据(因为没有捕获到ajax请求的数据包),那么只剩下一种可能,该动态数据是js动态生成的. 2.通过抓包工具查找到底数据是由哪个js请求产生的动态

js动态生成数据列表

我们通常会使用table标签来展示数据内容,由于需要展示的数据内容是随时更换的,所以不可能将展示的数据列表写死在html写死在页面中,而是需要我们根据后台传来的数据随时更换,这个时候就需要我们使用js来动态生成表格. 首先我们需要先写好页面的样式. html部分 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; chars

JS 动态生成JSON对象

JS 动态生成JSON对象,一般用到JSON传递参数的时候,会用到. function onGeneratedRow(columnsResult) { var jsonData = {}; columnsResult.forEach(function(column) { var columnName = column.metadata.colName; jsonData[columnName] = column.value; }); viewData.employees.push(jsonDat

抓取js动态生成数据

最近在抓数据,一般的网页数据抓取相对容易一些,今天在抓电视猫的节目单,发现有些数据时抓取不到的,Java端得到的HTML文件里面没有某一段代码,查了很多资料,发现说是js动态生成的数据,无法直接抓取,有一种解决方法是利用找到ajax请求地址和参数,重新抓取,该方法存在一个问题,就是当参数被加密过时,该方法就不好用了,所以,这里用了一个办法,就是利用HTMLunit来抓取(可以利用jsuop来处理HTML文件),jar包下载地址:http://download.csdn.net/detail/jo

如何进行js动态生成option?如何实现二级连动?

何为二级连动? 首先要明白什么是二级连动!顾名思义,就是一个动,另外一个也跟着一起动 看下面的例子: 这里有一个"市级"的选择列表框,还有一个"县级"的选择列表框,如果"市级"的选择列表框中的值发现变化,那么会连带"县级"的列表框发生变化. function selectOrg(){         var selectNow = document.getElementById("city");      

JS动态生成Input文本框 并获取文本框值

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns= "http://www.w3.org/1999/xhtml" > <head> <meta http-equiv= "Conte

js动态生成下拉列表

经常需要用到js动态生成下拉列表的功能,记录下来备用. 示例需求:通过ajax请求,从后台获取用户姓名列表,并添加到下拉列表中.js代码如下: 1 function getNameList(){ 2 //如果是类似三级联表的功能,则需在刚开始是对下拉列表进行初始化,如: 3 $("#nameList").html("<option value='0'>请选择姓名</option>"); 4 $.getJSON(url+"getNam

JS动态生成表格后 合并单元格

JS动态生成表格后 合并单元格 最近做项目碰到表格中的单元格合并的问题,需求是这样的,首先发ajax请求 请求回来后的数据 动态生成表格数据,但是生成后如果编号或者(根据其他的内容)有相同时,要合并单元格操作,在做之前也试着google下,但是网上没有碰到这方面的需求,所以自己写了一个简单的.用文字描述需求太费劲了,如下图所示: 1. 没有合并之前的图如下: 2. 合并之后的图如下: 如上所示:是根据相邻的编号相同 进行单元格合并. 先看看实现后的效果再聊吧! JSfiddle链接地址如下: 点

2)JS动态生成HTML元素的爬取

2)JS动态生成HTML元素的爬取 import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import cn.edu.hfut.dmic.webcollector.crawler.DeepCrawler; import cn.edu.hfut.dmic.webcollector.model.