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

Php 点击后退按钮时复选框仍处于选中状态,但它没有;勾选“;属性,php,checkbox,input,state,checked,Php,Checkbox,Input,State,Checked,我正在为电子商务开发一个基于复选框的过滤器。 一切正常,但当我尝试通过“后退”按钮返回时,复选框仍处于选中状态,没有任何选中属性。 我注意到这个“问题”发生在: 狩猎 铬 我找到的唯一方法就是重新加载页面。但是“用户返回”事件似乎不可捕获,我不想刷新每个页面 将“我的所有复选框”设置为默认值毫无意义 禁用Chrome缓存没有任何效果 我不知道我的代码样本是否有用 编辑:这是我的第一篇文章,请务必告诉我为什么我的问题看起来不清楚使用Javascript清理表单,使用jQuery这样的框架可

我正在为电子商务开发一个基于复选框的过滤器。 一切正常,但当我尝试通过“后退”按钮返回时,复选框仍处于选中状态,没有任何选中属性。

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

  • 狩猎

我找到的唯一方法就是重新加载页面。但是“用户返回”事件似乎不可捕获,我不想刷新每个页面

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

禁用Chrome缓存没有任何效果


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


编辑:这是我的第一篇文章,请务必告诉我为什么我的问题看起来不清楚

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

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

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

对正文加载使用以下功能

<body onLoad="uncheck()">


函数取消选中(){
$(':checkbox:checked').prop('checked',false);
//或者也可以使用removeAttr
//$(':checkbox:checked')。removeAttr('checked');
}
查看和了解更多详细信息

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

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

$(文档).ready(函数(){
$(':checkbox:checked').prop('checked',false);
//$(':checkbox:checked')。removeAttr('checked');
});
查看更多详细信息


如果你想清除所有的输入字段,下面是答案,并给出详细解释:

我知道这是一个老问题,但有人可能会“谷歌”相同的问题,并在这里登陆,就像我做的那样。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>

/*此脚本用于修复某些奇怪的浏览器(包括Chrome)行为。
历史记录返回对复选框的错误检查。
不幸的是,选中的HTML属性只是一个“默认值”*/
var filter_form=document.getElementById(“filter_form”);
var inputs=filter_form.getElementsByTagName(“输入”);
对于(变量i=0;i
有一个疯狂的技巧可以解决这个问题。在复选框中添加
autocomplete='off'
。听起来很疯狂,但是很管用

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

有什么活动吗?不正如关于的另一个问题所指出的,有一个事件将在设置好所有内容并执行其他所有javascript后触发—pageshow on window

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

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

如果使用
ready
事件(如忍者马特和苏约格建议的那样),请小心。除非指定
onunload
处理程序,否则它不会在背面触发。只需参见
window.onunload=function(){}
足够了,听起来很不错。事实上,问题已经解决了。谢谢@king_Nak事实上,在这种情况下,我的复选框充当过滤器。加载页面后清除所有复选框没有任何意义,因为它将通过$\u REQUESTUse JS恢复应检查的复选框使用JS获取http参数,然后根据需要应用/清除复选框?对不起,我想我误解了你的第一个问题。最终答案,这应该被接受。这似乎不是一个好的解决方案,即使它有效。听起来你好像在利用一个bug。如果“bug”在未来的浏览器中得到修复怎么办?疯狂的答案需要解释,理性的答案每天都胜过疯狂的答案。在我看来,OP好像在读取输入元素的checked属性,而他/她应该读取它的checked属性。checked属性仅指定复选框的初始化方式,但浏览器在向前/向后导航时会记住表单状态。checked属性应与浏览器当前呈现复选框的方式相匹配。“与其他浏览器不同,Firefox默认情况下保持跨页面加载的动态选中状态。使用autocomplete属性控制此功能。“你是我的英雄!!!谢谢
window.onpageshow  = () => {
    updateContent();
};