0

我有一个无序列表,其中包含从 JSON 对象创建的列表项。JSON 对象中的每个项目都有一个索引属性。

绑定到 UL 的 jQuery 点击事件:

$j("#courseGallery li").bind('click', function () {
   var index = $j("#courseGallery li").index(this);
   GetSelectedCourseInfo(index);
});

根据 UL 中选定的列表项索引过滤 JSON 数据的 jQuery 函数:

GetSelectedCourseInfo = function (index) {
    filteredData = $j.grep(sortedCourseData, function (e) {
        return e[index] === index;
    });
    if ($j("#altriaCourseDetails").children().length > 0) {
        $j(this).children().remove(); 
    }
    $j("#altriaCourseDetails").html($j("#selectedCourseTemplate").render(filteredData));
};

JSON数据样本:

[
{
    "index":0,
    "title":"Foo1",
    "description":"Bar1",
},
{
    "index":1,
    "title":"Foo2",
    "description":"Bar2",
},
{
    "index":2,
    "title":"Foo3",
    "description":"Bar3",
}
]

不幸的是,没有根据索引找到数组中的项目。任何帮助,将不胜感激。

谢谢。  

4

3 回答 3

0

每当您遇到此类问题时,请在遇到此问题的地方设置一个断点。在这种情况下,它将是第一行

GetSelectedCourseInfo = function (index) {
filteredData = $j.grep(sortedCourseData, function (e) { //breakpoint here
    return e[index] === index;
});

这样您就可以检查 index 和 sortedCourseData 的值。一旦你的断点被击中,你也可以在开发工具的控制台中进行比较。

于 2013-07-24T22:36:51.780 回答
0

您在过滤器功能中犯了一个错误应该是

return e.index === index

因为您正在访问一个对象而不是一个数组;)

小提琴:http: //jsfiddle.net/AVWFt/

于 2013-07-24T22:37:07.983 回答
0

ccI 使用标题解决了这个问题。

$j("#courseGallery li").bind('click', function () {
                var title = $j(this).children("#courseItemTitle").children("span").text();
                GetSelectedCourseInfo(title);
            });


GetSelectedCourseInfo = function (title) {
    filteredData = $j.grep(sortedCourseData, function (e) {
        return e.title === title;
    });
    if ($j("#altriaCourseDetails").children().length > 0) {
        $j(this).children().remove(); 
    }
    $j("#altriaCourseDetails").html($j("#selectedCourseTemplate").render(filteredData));
};
于 2013-07-25T15:28:56.627 回答