php 点击后退按钮时复选框仍处于选中状态,但它没有“已选中”属性

3z6pesqy  于 2023-03-11  发布在  PHP
关注(0)|答案(6)|浏览(140)

我正在为电子商务开发一个基于复选框的过滤器。一切正常,但当我尝试通过后退按钮返回时,复选框仍然选中,而没有任何选中属性。
我注意到此“问题”发生在:

  • 游猎
  • chrome

我发现唯一的方法就是重新加载页面,但是“用户返回”事件似乎无法捕捉,我也不想刷新每一个页面。
将所有复选框设置为默认值没有任何意义。
禁用Chrome缓存不起作用。
我不知道我的代码示例是否有用
编辑:这是我的第一篇文章,所以一定要告诉我为什么我的问题似乎不清楚

nwo49xxi

nwo49xxi1#

有一个疯狂的小窍门可以解决这个问题。在你的复选框中添加autocomplete='off'。听起来很疯狂,但是它很有效!

ujv3wf0j

ujv3wf0j2#

我知道这是一个老问题,但有人可能会“谷歌”同样的问题,并在这里登陆,就像我一样。在2019年Chrome 71仍然有这种行为,所以它不会很快消失。同时,这里有一个脚本,可以轻松地将选中状态调整为选中属性。

<script>
/* This script is to FIX some strange browser (Chrome included) behaviour.
History back returns false checks on checkboxes.
The checked HTML attribute is only a "DEFAULT VALUE" unfortunately */
var filter_form = document.getElementById("filter_form");
var inputs = filter_form.getElementsByTagName("input");
for(var i = 0; i < inputs.length; i++) {
    if(inputs[i].type == "checkbox") {
      /* If default is checked, but state is not checked, check it*/
      if (inputs[i].defaultChecked == true) {
        if (inputs[i].checked != true) {
          inputs[i].checked = true;
        }
      /* If defeault not checked, but state is checked, uncheck it */
      } else {
        if (inputs[i].checked == true) {
          inputs[i].checked = false;
        }
      }
    }  
}
</script>
f4t66c6m

f4t66c6m3#

使用Javascript来清理表单,使用jQuery这样的框架可能会更快。

$( document ).ready(function() {
    $(':input').val(''); //This would clear all inputs.
});

因此,当文档完成加载时,它将清除所有输入。

kx5bkwkv

kx5bkwkv4#

我也遇到过这个问题,但我想保持选中状态(并调整页面状态)。我遇到的问题是chrome在JavaScript运行后只更改了复选框的选中状态,包括load事件,而没有触发任何其他事件(如change或input)。
有任何事件吗?没有!正如另一个关于firefox keeping the page in cache without executing JS when clicking the back button的问题所指出的,有一个事件将在所有设置和每个其他javascript被执行后触发- pageshow on window。

window.onpageshow  = () => {
    updateContent();
};

这不仅会在firefox中执行,甚至在历史记录返回后,而且在Chrome检查了历史记录返回后的复选框后,复选框上选中的 prop 将处于正确的状态。

oxiaedzo

oxiaedzo5#

如果还有人需要解决的话。
因为我需要得到 的输入,我找到的解决方案是将函数放在setTimeout中
所以当它发射时 被捕获。
设置超时(加载,0);

fafcakar

fafcakar6#

对身体负载使用以下函数。

<body onLoad="uncheck()">
<script>
    function uncheck() {
        $(':checkbox:checked').prop('checked',false);
        //or you can also use removeAttr
        //$(':checkbox:checked').removeAttr('checked');
    }
</script>

有关详细信息,请检查propremoveAttr
或者也可以使用以下代码

<script>
$( document ).ready(function() {
    $(':checkbox:checked').prop('checked',false);
    //$(':checkbox:checked').removeAttr('checked');
});
</script>

查看.ready了解更多详细信息。

如果你想清除所有的输入字段,这里有详细的解释:Resetting a multi-stage form with jQuery

相关问题