0

私は<ul>それぞれ<li>がのようなIDを持つを持ってい<li id='entry24'>ます。クリックすると、にgetリクエストを送信して、そのエントリ情報をサーバーに照会する必要があります/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

これが最善の解決策です。これを見てください:

$("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 に答える
2

これを試して、

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

<li>HTMLの場合、のすべてのsのtitle属性にエントリIDを定義します。<ul>

AJAX関数は、<li>がクリックされたときにのみ呼び出され、title属性がそれぞれに一意であり、毎回<li>一意のIDになるため、これは間違いではない場合に機能するはずです。

于 2012-11-11T08:50:53.733 に答える
-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"
        )
    });
}

これは、onclickハンドラーが定義されたときに変数の周りにクロージャを形成しentryId、各エントリに対して適切なIDが保持されるようにする必要があります。

于 2012-11-11T08:51:44.647 に答える