复选框仍然选中点击后退按钮,但它没有“;“已检查”;属性


Checkbox still checked hitting the back button, but it has no "checked" attribute

我正在为电子商务开发一个基于复选框的过滤器。一切都很好,但当我试图通过后退按钮返回时,复选框仍然选中,没有任何选中的属性

我注意到这个"问题"发生在:

  • Safari

我找到的唯一方法就是重新加载页面。但是"用户返回"事件似乎不太容易被捕捉,我不想刷新每一个页面。

将我的所有复选框设置为默认值毫无意义。

禁用Chrome缓存无效。


我不知道我的代码样本是否对有用

编辑:这是我的第一篇文章,所以一定要告诉我为什么我的问题看起来不清楚

有一个疯狂的技巧可以解决这个问题。将autocomplete='off'添加到复选框中。听起来很疯狂,但它很管用!

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

<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>

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

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

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

我也遇到了这个问题,但希望保持选中状态(只需调整页面状态)。我遇到的问题是,chrome只是在运行JavaScript后更改了复选框的选中状态,包括加载事件,而没有触发任何其他事件(如更改或输入)。

有什么活动吗?不正如另一个关于firefox在点击后退按钮时不执行JS而将页面保持在缓存中的问题所指出的那样,有一个事件会在设置完所有内容并执行完其他所有javascript后触发——pageshow on window。

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

这不仅会在firefox中执行,即使在历史记录返回后,也会在Chrome在历史记录恢复后选中复选框,并且复选框上选中的道具将处于正确状态。

如果还有人需要解决方案。

因为我需要获得价值​​在输入中,我找到的解决方案是将函数放入setTimeout 中

因此,当它启动时​​被捕获。

setTimeout(加载,0);

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

<body onLoad="uncheck()">

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

查看道具和移除Attr了解更多详细信息

或者您也可以使用以下代码

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

查看。准备了解更多详细信息。

如果你想清除所有的输入字段,这里有详细的解释:用jQuery 重置多阶段表单