0

我有一个<ul>,每个人<li>都有一个像<li id='entry24'>. 单击一个时,我需要通过向/query/getEntry/id=24.

使用此代码:

for(var entry = 0; entry < entryIds.length; entry++) {
    $("#entry" + entryIds[entry]).click(function() {
        $.get(
            "/query/getEntry",
            {id: entryIds[entry]},
            getEntryCallback,
            "html"
        )
    });
}

我发现每个请求都发送相同的 id - 最后一个条目的 id。经过一番研究,我将代码修改为:

for(var entry = 0; entry < entryIds.length; entry++) {
    var entryId = entryIds[entry];
    $("#entry" + entryId).click(function(event) {
        $.get(
            "/query/getEntry",
            {id: event.target.id.replace("entry", "")},
            getEntryCallback,
            "html"
        )
    });
}

哪个效果更好(每个都<li>发送正确的ID)。但是,查看 Firebug 控制台,我可以看到每次单击都会发出请求,但大约 75% 的时间它们显示/query/getEntry/id=为红色......这意味着 id 没有实际发送,我没有得到我期望的结果。

我可以确认每个<li>DOES 都有一个适当的id字段。

非常感谢任何帮助/建议!

4

3 回答 3

2

试试这个,

$('ul li').click(function(){
    entryid = $(this).attr('title');
    $.get(
        "/query/getEntry",
        {id: entryid.replace("entry", "")},
        getEntryCallback,
        "html"
    )
});

<li>对于您的 html,在您的所有 s的标题属性中定义条目 id<ul>

如果没有错,这应该可以工作,因为 AJAX 函数仅在单击时才被调用<li>,并且 title 属性对每个属性都是唯一的,因此每次都会<li>产生唯一的 id。

于 2012-11-11T08:50:53.733 回答
2

这是最好的解决方案,请看这个:

$("li[id^='entry']").on("click",function() {
    var id = $(this).attr("id").substring(5);
    $.get(
        "/query/getEntry",
        {id: id},
        getEntryCallback,
        "html"
    );
});
于 2012-11-11T09:12:16.327 回答
-1

我不确定你为什么会遇到这个问题<li>。但是,请尝试这样做:

for(var entry = 0; entry < entryIds.length; entry++) {
    var entryId = entryIds[entry];
    $("#entry" + entryId).click(function(event) {
        $.get(
            "/query/getEntry",
            {id: entryId},
            getEntryCallback,
            "html"
        )
    });
}

这应该在entryId定义 onclick 处理程序时围绕变量形成一个闭包,以便为每个条目保留正确的 id。

于 2012-11-11T08:51:44.647 回答