如何从jQuery重定向到另一个视图

时间:2019-02-15 18:53:58

标签: jquery asp.net

我有一个下拉列表,显示一个轮(1周)内玩过的所有游戏。我选择了该ID,它确实向我显示了所有游戏。但是现在我有了另一个按钮,它将选择相同的ID,然后将我重定向到我要编辑分数的页面。这不起作用,但是可能是因为我不知道我在做什么。

$(function() {
  $('#RoundId').change(function() {
    var data = {
      roundId: $('#RoundId').val()
    };

    $.get("/Games/OfRound", data, function(result, status) {
      console.log(status);
      $('#results').html(result);
    });

    $('#editScores').click(function() {
      window.location.href = '/EditScores/Index/?=' + data.roundId;
    })
  });

  $('#RoundId').trigger("change")
});

1 个答案:

答案 0 :(得分:1)

这里的逻辑有两个问题。首先,您将click处理程序嵌套在change处理程序中,因此,每次发生更改时,都会添加一个单击,然后单击一次添加另一个。

此外,当AJAX请求完成时,您不会更新data对象,因此,单击只会转到第一个选定的RoundId值。

要解决此问题,请在发生#RoundId事件以重定向页面时读取click值:

$(function() {
  $('#RoundId').change(function() {
    $.get("/Games/OfRound", {
      roundId: $('#RoundId').val()
    }, function(result) {
      $('#results').html(result);
    });
  }).trigger('change');

  $('#editScores').click(function() {
    window.location.assign('/EditScores/Index/?=' + $('#RoundId').val());
  });
});

请注意,这是假设#editScores是静态元素,在页面加载时该元素存在于DOM中。如果该元素是附加到#results的HTML的一部分,则您需要用委托的事件处理程序替换该click()调用:

$('#results').on('click', '#editScores', function() {
  window.location.assign('/EditScores/Index/?=' + $('#RoundId').val());
});