javascript - 在浏览器中单击后退/前进按钮后如何重置 HTML 表单复选框值?
问题描述
除非用户单击后退/前进,否则一切正常。此时复选框值不会重置为先前的状态。
我有一个 HTML 表单(带有 php)来输入搜索条件,并带有一个提交按钮来执行搜索。我为两个复选框使用了隐藏的输入字段,以在提交执行后保留该值。看起来像这样:
search.php
<?php
$search = [];
$search['keyword'] = $_GET['keyword'] ?? '';
$search['startDateRange'] = $_GET['startDateRange'] ?? '';
$search['endDateRange'] = $_GET['endDateRange'] ?? '';
$search['requestedBy'] = $_GET['requestedBy'] ?? '';
if (isset($_GET['openStatus'])) {
$search['openStatus'] = $_GET['openStatus'];
} else {
$search['openStatus'] = "on";
}
if (isset($_GET['closedStatus'])) {
$search['closedStatus'] = $_GET['closedStatus'];
} else {
$search['closedStatus'] = "on";
}
?>
<form action="search.php" autocomplete="off" id="searchCriteria">
<label>Keyword</label>
<input type="text" autocomplete="off" value = "<?php echo $search['keyword']; ?>" name="keyword" id="keyword" />
<br>
<label>Request Date</label>
<input type="date" value = "<?php echo $search['startDateRange']; ?>" name="startDateRange" id="startDateRange" />
<label>to</label>
<input type="date" value = "<?php echo $search['endDateRange']; ?>" name="endDateRange" id="endDateRange"/>
<br>
<label>Requested By</label>
<input type="text" value = "<?php echo $search['requestedBy']; ?>" name="requestedBy"
id="requestedBy"/>
<br>
<input type="hidden" name="openStatus" value="off" >
<input type="checkbox" value = "on" id="openStatus" name="openStatus" <?php echo $search['openStatus']=="on" ? 'checked' : ''; ?>/>
<label>include Open Requests</label>
<br>
<input type="hidden" name="closedStatus" value="off" >
<input type="checkbox" value = "on" id="closedStatus" name="closedStatus" <?php echo $search['closedStatus']=="on" ? 'checked' : ''; ?>/>
<label>include Completed Requests</label>
<br>
<input type="submit" value="Refine Search">
<button onclick="location.href='index.php'" type="button">
Back to Requests</button>
</form>
在用户点击后退按钮之前,这可以正常工作。为了解决这个问题,我添加了以下 javascript:
<script>
//added to fix back/forward button cache problem
window.addEventListener("pageshow", () => {
//these four work
document.getElementById("keyword").value = "<?php echo $search['keyword']; ?>";
document.getElementById("startDateRange").value = "<?php echo $search['startDateRange']; ?>";
document.getElementById("endDateRange").value = "<?php echo $search['endDateRange']; ?>";
document.getElementById("requestedBy").value = "<?php echo $search['requestedBy']; ?>";
//these two don't work
document.getElementById("openStatus").value = "<?php echo $search['openStatus']; ?>";
document.getElementById("closedStatus").value = "<?php echo $search['closedStatus']; ?>";
>";
});
</script>
此 javascript 正确重置文本类型输入值,但不会重置复选框字段。我认为问题在于我使用了隐藏的输入字段,但我不清楚如何解决它。任何帮助表示赞赏!
解决方案
推荐阅读
- amazon-cloudformation - 如何根据 AWS Cloud-formation 中的资源名称获取堆栈详细信息
- javascript - JSX 元素类型 'ReactElement
不是 JSX 元素的构造函数。类型“未定义”不可分配给类型“元素 | 空值' - python - pandas.read_csv 的 Nan 问题
- vue.js - 动态帖子输入
- minecraft - 有没有办法让我的世界java版命令块代码变成我的世界基岩版命令块代码?
- github - 如何接受来自机器人的许多 github PR?
- javascript - 选择独特的项目并将它们标记为js
- solr - 使用 Solr Cloud 的分片/副本数量的最佳实践
- python - ImportError:导入 cv2 时 DLL 加载失败:找不到指定的模块
- git - 如何在整个新的 Github 存储库上创建拉取请求