2 qq 15290009 qq_15290009 于 2016.03.16 11:08 提问

帮我看看 那不对 !!!!!
js

图片说明

年龄段 后面跟男或者女 二级联动

js

之前不需要 男 女 是一个大神帮我写的代码 代码里我注释 是我后加进去的

但是没加对 求看看

还有就是  结果 精确的俩位的话 在哪加toFixed 我加上不是 0.00 就是  00.0 
 <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.2.min.js"></script>
<script>
    var food = {
        谷物: {
            //大米数组中依次存储 热量,蛋白质,脂肪,碳水化合物,胆固醇。。。其他食品同理

            //生成数据一定要生成和你表头列数一样的数字数组
            大米: [1, 2, 3, 4, 5], 小麦: [2, 3, 4, 5, 6], 玉米: [3, 4, 5, 6, 7]/*..更加多谷物*/
        },
        蔬菜: {
            大白菜: [2, 3, 4, 5, 6], 菠菜: [3, 4, 5, 6, 7]/*...更多蔬菜*/
        }
        //....更加多食物种类
    };
    //岁数数组中的营养和上面列出的一致
    var age = {
        请选择:{
            请选择:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
            },
        '1-7岁': {
            "女":[1, 2, 3, 4, 5],
            "男":[1, 2, 3, 4, 5]  
            } ,
};
</script>
食品:<select id="food1"></select><select id="food2"></select><input type="button" value="添加" onclick="addFood()" /><br />
年龄段:<select id="age"></select> <select id="sex"></select><br />
<table border="1">
    <tr><td>食物名称</td><td>热量</td><td>蛋白质</td><td>脂肪</td><td>碳水化合物</td><td>胆固醇</td><td>操作</td></tr>
    <tr id="trSum"><td>合计</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
    <tr id="trAge"><td>人体正常值</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
    <tr id="trDiff"><td>差距值</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
    <tbody id="tbFood"></tbody>
</table>
<script>
    var sFood1 = $('#food1'), sFood2 = $('#food2'), sAge = $('#age'),sage1 = $('#sex')
         //去掉第一个名列和最后一个操作列
        , tdSums =  $('#trSum td:gt(0)')
        , tdAges = $('#trAge td:gt(0)')
        , tdDiffs = $('#trDiff td:gt(0)')
        //////
        , tbFood = $('#tbFood') 
    //初始化食品一级分类及事件
    for (attr in food) sFood1.append('<option value="' + attr + '">' + attr + '</option>');
    sFood1.change(function () {
        var arr = food[this.value];
        sFood2.html('');
        for (attr in arr) sFood2.append('<option value="' + attr + '">' + attr + '</option>');
    }).trigger('change');//触发一级分类加载2级分类
    //初始化年龄段
    for (attr in age) sAge.append('<option value="' + attr + '">' + attr + '</option>');
    sAge.change(function () {
        var arr = age[this.value];
        //sAge1.html('');
        //for (attr in arr) sAge1.append('<option value="' + attr + '">' + attr + '</option>');
        tdAges.each(function (index) { this.innerHTML = arr[index]; });

        updateSumDiff();
    }).trigger('change');//触发onchange更新trAge中的td数值

    function updateSumDiff() {//更新合计和差距
        var sum = [];//每营养小计
        tbFood.find('tr').each(function () {
            $('td:gt(0)', this).not(':last').each(function (index) {
                sum[index] = (parseFloat(this.innerHTML) || 0) + (sum[index] || 0);
            });
        });
        //更新合计和差距
        tdAges.each(function (index) {
            tdSums.eq(index).html((parseFloat(this.innerHTML) || 0) + (sum[index] || 0));
            tdDiffs.eq(index).html((parseFloat(this.innerHTML) || 0) - (sum[index] || 0));
        });
    }
    function addFood() {
        var arr = food[sFood1.val()][sFood2.val()];
        var s = '<tr><td>' + sFood2.val() + '</td>';
        for (var i = 0; i < arr.length; i++) s += '<td>' + arr[i] + '</td>';
        s += '<td><input type="button" value="删除" onclick="removeFood(this)"/></td></tr>';
        tbFood.append(s);
        updateSumDiff();
    }
    function removeFood(o) { $(o).closest('tr').remove(); updateSumDiff(); }
</script>

5个回答

showbo
showbo   Ds   Rxr 2016.03.16 16:00
已采纳

你改我代码都改错了,要去掉最后一个td,自己看下数据结构,你的变量sex名称我也改成sSex了,

 <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.2.min.js"></script>
<script>
    var food = {
        谷物: {
            //大米数组中依次存储 热量,蛋白质,脂肪,碳水化合物,胆固醇。。。其他食品同理

            //生成数据一定要生成和你表头列数一样的数字数组
            大米: [1, 2, 3, 4, 5], 小麦: [2, 3, 4, 5, 6], 玉米: [3, 4, 5, 6, 7]/*..更加多谷物*/
        },
        蔬菜: {
            大白菜: [2, 3, 4, 5, 6], 菠菜: [3, 4, 5, 6, 7]/*...更多蔬菜*/
        }
        //....更加多食物种类
    };
    //岁数数组中的营养和上面列出的一致
    var age = {
        请选择:  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        '1-7岁': {
            "女": [1, 2, 3, 4, 5],
            "男": [3, 4, 5, 6, 7]
        },
    };
</script>
食品:<select id="food1"></select><select id="food2"></select><input type="button" value="添加" onclick="addFood()" /><br />
年龄段:<select id="age"></select> <select id="sex"><option value="男">男</option><option value="女">女</option></select><br />
<table border="1">
    <tr><td>食物名称</td><td>热量</td><td>蛋白质</td><td>脂肪</td><td>碳水化合物</td><td>胆固醇</td><td>操作</td></tr>
    <tr id="trSum"><td>合计</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
    <tr id="trAge"><td>人体正常值</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
    <tr id="trDiff"><td>差距值</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
    <tbody id="tbFood"></tbody>
</table>
<script>
    var sFood1 = $('#food1'), sFood2 = $('#food2'), sAge = $('#age'), sSex = $('#sex')
         //去掉第一个名列和最后一个操作列
        , tdSums = $('#trSum td:gt(0)').not(':last')
        , tdAges = $('#trAge td:gt(0)').not(':last')
        , tdDiffs = $('#trDiff td:gt(0)').not(':last')
        //////
        , tbFood = $('#tbFood')
    //初始化食品一级分类及事件
    for (attr in food) sFood1.append('<option value="' + attr + '">' + attr + '</option>');
    sFood1.change(function () {
        var arr = food[this.value];
        sFood2.html('');
        for (attr in arr) sFood2.append('<option value="' + attr + '">' + attr + '</option>');
    }).trigger('change');//触发一级分类加载2级分类
    //初始化年龄段
    for (attr in age) sAge.append('<option value="' + attr + '">' + attr + '</option>');
    sAge.add('#sex').change(function () {///////
        var arr = sAge.val() == '请选择' ? age['请选择'] : age[sAge.val()][sSex.val()];
        //sAge1.html('');
        //for (attr in arr) sAge1.append('<option value="' + attr + '">' + attr + '</option>');
        tdAges.each(function (index) { this.innerHTML = arr[index]; });

        updateSumDiff();
    }).eq(0).trigger('change');//触发onchange更新trAge中的td数值

    function updateSumDiff() {//更新合计和差距
        var sum = [];//每营养小计
        tbFood.find('tr').each(function () {
            $('td:gt(0)', this).not(':last').each(function (index) {
                sum[index] = (parseFloat(this.innerHTML) || 0) + (sum[index] || 0);
            });
        });
        //更新合计和差距
        tdAges.each(function (index) {
            tdSums.eq(index).html((parseFloat(this.innerHTML) || 0) + (sum[index] || 0));
            tdDiffs.eq(index).html((parseFloat(this.innerHTML) || 0) - (sum[index] || 0));
        });
    }
    function addFood() {
        var arr = food[sFood1.val()][sFood2.val()];
        var s = '<tr><td>' + sFood2.val() + '</td>';
        for (var i = 0; i < arr.length; i++) s += '<td>' + arr[i] + '</td>';
        s += '<td><input type="button" value="删除" onclick="removeFood(this)"/></td></tr>';
        tbFood.append(s);
        updateSumDiff();
    }
    function removeFood(o) { $(o).closest('tr').remove(); updateSumDiff(); }
</script>
qq_15290009
qq_15290009 好了 刚才没看清 我以为 光去.eq(0) 这个呢 在那添加 精确
一年多之前 回复
qq_15290009
qq_15290009 没什么用啊
一年多之前 回复
qq_15290009
qq_15290009 }).eq(0).trigger('change'); 这个 ??
一年多之前 回复
showbo
showbo 回复热呛: 去掉 .eq(0).trigger('change');这个
一年多之前 回复
qq_15290009
qq_15290009 看下图 初始页面 我不想让他有值 选择之后再由值
一年多之前 回复
qq_15290009
qq_15290009 就是想他都没有值 选择之后再出值
一年多之前 回复
showbo
showbo 回复热呛: 或者给年龄段设置默认值。for (attr in age) sAge.append('<option value="' + attr + '">' + attr + '</option>');后添加sAge.val('1-7岁');
一年多之前 回复
showbo
showbo 回复热呛: 那你年龄段不要加请选择啊。。你请选择不都是0,去掉就会默认加载1-7岁的男的正常值
一年多之前 回复
qq_15290009
qq_15290009 还有就是页面初始状态 怎么让他没值 现在这种状况 页面初始 都是0
一年多之前 回复
qq_15290009
qq_15290009 如果 结果精确的话 在那加toFixed呢 tdSums.eq(index).html((parseFloat(this.innerHTML) || 0) + (sum[index] || 0)); tdDiffs.eq(index).html((parseFloat(this.innerHTML) || 0) - (sum[index] || 0)); 我在这加的不对 还有
一年多之前 回复
liganglester
liganglester   2016.03.16 12:11

仔细看了你的提问内容,没有找到关于问题现象的描述

你这样让别人很难帮助你啊

提问者应该在如何节省回答者时间上下功夫。否则问题会被无视的。

qq_15290009
qq_15290009 额 我的意思 就是 年龄段的男女 取不到值 这是个完整的 html 运行一下就可
一年多之前 回复
u013772876
u013772876   2016.03.16 13:14

改成这样就可以了!

  sAge.change(function () {
        var arr = age[this.value];
        sage1.html('');
        for (attr in arr) sage1.append('<option value="' + attr + '">' + attr + '</option>');
        tdAges.each(function (index) { this.innerHTML = arr[index]; });

        updateSumDiff();
    }).trigger('change');//触发onchange更新trAge中的td数值
qq_15290009
qq_15290009 还在吗 调取不到值
一年多之前 回复
qq_15290009
qq_15290009 var age = { 请选择:{ 请选择:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] }, '1-7岁': { "女":[1, 2, 3, 4, 5], "男":[1, 2, 3, 4, 5] } , 这个值调取不到
一年多之前 回复
qq_15290009
qq_15290009 好了 可是还是调取不到值啊
一年多之前 回复
u013772876
u013772876 回复热呛: tdAges.each(function (index) { this.innerHTML = arr[index]; }); 这句改成tdAges.each(function (index) { this.innerHTML = (arr[index] || 0 ) ; });
一年多之前 回复
qq_15290009
qq_15290009 在哪里加
一年多之前 回复
u013772876
u013772876 回复热呛: (arr[index] || 0 )
一年多之前 回复
u013772876
u013772876 回复夜黑风高的晚上: 人体正常值这一行undefined是因为 tdAges.each(function (index) { this.innerHTML = arr[index]; }); 中的 arr[index] 你改下这个逻辑和updateSumDiff()函数中的“更新合计和差距”一样
一年多之前 回复
qq_15290009
qq_15290009 对 调取不到值 var age = { 请选择:{ 请选择:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] }, '1-7岁': { "女":[1, 2, 3, 4, 5], "男":[1, 2, 3, 4, 5] } , 这个里的值 出现是是 undefined
一年多之前 回复
u013772876
u013772876 回复热呛: 你是指人体正常值这一行数据是undefined是吧!还要解决这个问题?
一年多之前 回复
qq_15290009
qq_15290009 回复夜黑风高的晚上: 是的 我之前就这么写 就出现这个了 undefined
一年多之前 回复
u013772876
u013772876 源码中sage1变量名字你下面赋值时写错了变量名字!
一年多之前 回复
Royal_lr
Royal_lr   Ds   Rxr 2016.03.16 13:42

并没有看到要问什么,,

qq_15290009
qq_15290009   2016.03.16 16:27

图片说明
有的时候回出现这种情况 所以想精确一下 但是 我加toFixed 不是 00.00 就是 0.00.0 这样

图片说明

我想让他初始页面是这样呢

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!