-1

我的代码:

    <script type="text/javascript">
            window.onload = function () {
                  $.post("/Game/GetPlayers", function (data) {
                    for (var i = 0; i < data.player.length; i++) {
                        if ("@Session.SessionID" == data.player[i].AgainstId);
                        {
                           //some code
                        }
                        $("<li></li>").text(data.player[i].Name).on("click", function () {
\*when i click - field hide */            $(this).hide();
                      $.post("/Game/SetId", { name: data.player[i].Name },function(data2) {
                                alert(data2);
                            });
                        }).prependTo("ol");
                    }
                });
            }
        </script>

为什么我点击时标签(li)消失但第二个帖子请求不起作用?有可能(请求中的请求)吗?

4

1 回答 1

1

我认为li单击导致错误data.player[i] is undefined

这是因为使用了闭包变量i。然后发生的点击事件i将具有该值data.player.lengthdata.player[data.player.length]未定义。

$(function() {
    $.post("/Game/GetPlayers", function(data) {
        $.each(data.player, function(i, v) {
            if ("@Session.SessionID" == v.AgainstId) {
                // some code
            }
            $("<li></li>").text(v.Name).on("click", function() {
                // when i click - field hide
                // $(this).hide();
                $.post("/Game/SetId", {
                            name : v.Name
                        }, function(data2) {
                            alert(data2);
                        });
            }).prependTo("ol");
        });
    });
})

另一种选择是使用事件委托

$(function() {
    $.post("/Game/GetPlayers", function(data) {
        $.each(data.player, function(i, v) {
            if ("@Session.SessionID" == v.AgainstId) {
                // some code
            }
            $("<li></li>").text(v.Name).data("player",
                    v.name).prependTo("ol");
        });
    });

    $('ol').on('click', 'li', function() {
        var $this = $(this);
        // when i click - field hide
        // $(this).hide();
        $.post("/Game/SetId", {
            name : $this.data('player')
        }, function(data2) {
            alert(data2);
        });
    });
});
于 2013-03-28T04:39:35.370 回答