Javascript 选择radiobutton时重新加载页面

Javascript 选择radiobutton时重新加载页面,javascript,Javascript,我正在尝试使用单选按钮从数据库中排序对象。我希望通过url传递排序参数,然后在按下单选按钮时重新加载页面。但是,当选中单选按钮时,我无法重新加载页面 radiobuttons有一个类,在JS中,我访问它们并向每一个添加事件侦听器。问题是,重新加载可以工作,但不会停止重新加载,或者页面根本不重新加载 相关JS代码 const url = (new URL(window.location.href)).searchParams; let buttons = document.getElements

我正在尝试使用单选按钮从数据库中排序对象。我希望通过url传递排序参数,然后在按下单选按钮时重新加载页面。但是,当选中单选按钮时,我无法重新加载页面

radiobuttons有一个类,在JS中,我访问它们并向每一个添加事件侦听器。问题是,重新加载可以工作,但不会停止重新加载,或者页面根本不重新加载

相关JS代码

const url = (new URL(window.location.href)).searchParams;

let buttons = document.getElementsByClassName('sf');

for(let i = 0; i < buttons.length; i++) {
    buttons[i].addEventListener('click', window.location.reload(false));
}
这段代码没有任何作用

我很确定页面会无限地重新加载,因为我在循环中分配事件侦听器,但是我怎么做呢

buttons[i].addEventListener('click', window.location.reload(false));
不是将函数绑定到事件,而是实际调用
window.location.reload(false)

您应该定义一个调用
reload
的函数,如下所示

buttons[i].addEventListener('click', () => window.location.reload(false));
这个

不是将函数绑定到事件,而是实际调用
window.location.reload(false)

您应该定义一个调用
reload
的函数,如下所示

buttons[i].addEventListener('click', () => window.location.reload(false));

这与您认为的不同:

buttons[i].addEventListener('click', window.location.reload(false));
这将立即执行
.reload()
,并且(如果页面没有重新加载,使其仍然没有意义)将该函数的结果(未定义)绑定为事件侦听器

您不希望绑定到重新加载的结果,而是希望绑定到重新加载的函数:

buttons[i].addEventListener('click', function () {
    window.location.reload(false);
});

现在,不管这是否会修复表排序,这本身有点超出了范围。但这应该可以防止无限次的重新加载,至少可以将重新加载绑定到click事件。

这不会像您认为的那样:

buttons[i].addEventListener('click', window.location.reload(false));
这将立即执行
.reload()
,并且(如果页面没有重新加载,使其仍然没有意义)将该函数的结果(未定义)绑定为事件侦听器

您不希望绑定到重新加载的结果,而是希望绑定到重新加载的函数:

buttons[i].addEventListener('click', function () {
    window.location.reload(false);
});

现在,不管这是否会修复表排序,这本身有点超出了范围。但这应该可以防止无限重载,并且至少可以将重载绑定到click事件。

。addEventListener
需要一个回调函数作为其第二个参数,它可以在单击按钮时执行。此时,您不是在添加回调函数,而是在执行一个函数(因此将使用
window.location.reload(false)
的返回结果)

因此,您实际上是在页面加载时调用回调函数,而不是在单击事件发生时

相反,一个相对简单的解决方案是将要执行的函数包装到函数本身中。这样,您就可以调用函数,然后执行页面重新加载

for(let i = 0; i < buttons.length; i++) {
    buttons[i].addEventListener('click', _ => window.location.reload(false));
}
for(设i=0;iwindow.location.reload(false));
}

。addEventListener
要求将回调函数作为其第二个参数,单击按钮时可以执行该参数。此时,您不是在添加回调函数,而是在执行一个函数(因此将使用
window.location.reload(false)
的返回结果)

因此,您实际上是在页面加载时调用回调函数,而不是在单击事件发生时

相反,一个相对简单的解决方案是将要执行的函数包装到函数本身中。这样,您就可以调用函数,然后执行页面重新加载

for(let i = 0; i < buttons.length; i++) {
    buttons[i].addEventListener('click', _ => window.location.reload(false));
}
for(设i=0;iwindow.location.reload(false));
}