Javascript 如何基于json数据列表更新html项列表

Javascript 如何基于json数据列表更新html项列表,javascript,jquery,json,closures,Javascript,Jquery,Json,Closures,我的html页面中有一个复选框列表,如下所示: <ul id="myList"> <li class="checkboxItem"> <input type="checkbox" name="item1" value="001" id="item-1"/> <label for="item-1" class="checkboxLabel">Display 1</label> </li> <

我的html页面中有一个复选框列表,如下所示:

<ul id="myList">
  <li class="checkboxItem">
    <input type="checkbox" name="item1" value="001" id="item-1"/> 
    <label for="item-1" class="checkboxLabel">Display 1</label>
  </li>
  <li class="checkboxItem">
    <input type="checkbox" name="item2" value="042" id="item-2"/>
    <label for="item-2" class="checkboxLabel">Display 42</label>
  </li> 
</ul>
我要做的是循环返回的json并更新复选框列表,以便禁用不在返回列表中的任何项目,并且更新标题与给定标签匹配的项目的输入值

因此在本例中,item2将被禁用,item1的值将更新为002

这是我到目前为止得到的,我不太确定从这里走到哪里,也就是说,在循环中该做什么。我确实可以控制json的返回方式,因此如果以另一种格式重新调用json是有意义的,我可以这样做

编辑,更新功能,见下文。但是,一旦我进入each函数中的for循环,elem就会得到一个值“0”,而不是一个js对象,例如: {“名称”:“002”,“标题”:“显示1”}。很明显,数据正在从函数的外部范围传输到每个函数的内部范围,但我如何做到这一点呢

function(data) {
        $('#myList').children('li').each(function(i,e) {
            for(var elem in data) {
                var elemDescr = elem['title'];
                var elemName = elem['name'];
                if(elemDescr==$(this).find('.checkboxLabel').text()) {
                    $(this).find('input').attr('value',elemName);
                }
            }
        });

每个复选框都有一个外循环,每个json元素都有一个内循环,根据元素/复选框是否匹配来启用或禁用它可能更容易

因此,与你所拥有的相反:

function(data) {
    $('#myList').children('li').each(function() {
        // loop through your data elements here
    });
}

另一个选项(可能不太理想,因为它可能会导致多个禁用/启用的转换)是禁用所有复选框,并在循环每个元素时启用它们。

我发现了我的问题。而不是做:

for(var elem in data) {
            var elemDescr = elem['title'];
            var elemName = elem['name'];

        }
我需要做:

for(var index in data) {
            var elemDescr = data[index].title;
            var elemName = data[index].name;

        }
for(var index in data) {
            var elemDescr = data[index].title;
            var elemName = data[index].name;

        }