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();
};