我有一个下拉列表,显示一个轮(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")
});
答案 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());
});