如何清除HTML表单,甚至是表单的初始值?



我有一个HTML表单,它通过post将信息发送到PHP文件。

在用户第二次访问时,页面应该记住最后一次搜索输入。因此,如果他们在第一次访问时正在寻找铅笔,那么在第二次访问时,表单已经用预先填充了产品名称输入。我通过两个文件之间共享的会话变量来完成这项工作。

例如,我的代码是这样的:

<label for="minPrice">Minimum Price</label>
<input id="minPrice" type="text" value="<?php echo $_SESSION['minPrice'];?>" name="minPrice">
<input class="clearForm" type="reset" value="Clear Form">

正如您所看到的,我正在使用会话变量设置输入字段的值。这意味着输入的第二次访问的初始值将是$_SESSION['minPrice']的值,因此典型类型=";重置";清除表格不起作用。重置只是将表单重置为其初始值。

我的第一个想法是取消设置会话变量,但这不会改变表单输入字段中的当前值

有两种方法可以实现

  • 正确使用PHP会话
  • 使用Javascript本地存储

使用PHP会话

确保php文件的顶部有session_start()

现在你需要请求服务器保存你想在";下一次访问";。这意味着,使用AJAX,在不刷新页面的情况下通过HTML表单提交请求服务器。

下面的JS片段将向服务器发布一个表单,您可以像吃苹果派一样轻松地修改要发布的内容。

fetch(url, {method: 'POST', body: new FormData(form)})

但是当用户键入内容时必须POST,所以添加一个触发fetch方法的eventListener。

document.getElementById('minPrice').addEventListener('keydown', () => {fetch...})

url是要POST到的文件名或url,

form是您想要提交的表单,如果您想要单独提交一些输入字段,请将new FormData(form)替换为{minPrice: document.getElementById('minPrice').value},依此类推

fetch方法分配给一个变量,就可以使用获得服务器的响应

variable.then(res => res.json()).then(response => //do whatever you want)

在服务器端,使用superGlobal$_POST(如$_POST['minPrice'](获取值,然后可以将其保存在$_SESSION['minPrice']变量中,每当用户重新加载或进行第二次访问时,$_SESSION['minPrice ']都会将上次写入的minPrice分配给输入字段。

使用Javascript本地存储

localStorage内置在javascript中,使用起来非常容易。阅读MDN文档中有关localStorage的更多信息。使用

localStorage.setItem('minPrice', document.getElementById('minPrice').value)

并在每次页面加载时为字段分配localStorage值。

document.getElementById('minPrice').value = localStorage.getItem('minPrice')

就是这样

看看这个!

制作页面以告知浏览器不要缓存/保留输入值

停止浏览器在文本框中填充详细信息

或者,尝试在Jquery中添加此项:

$("form :input").attr("autocomplete", "off");

使用JavaScript清除表单字段的值。

类似于:

<button onclick="() => {
document.querySelectorAll('input').value = '';
}" />

这样,当您单击重置按钮时,它会将所有输入值设置为空字符串。

如果您永远不想让浏览器自动填充字段,那么您似乎只想在希望由php脚本动态填充的输入字段上使用autocomplete="off"标志。

您可以在MDN文档中阅读更多关于这方面的具体信息。

基本上,尽管您会接受输入,但将其存储为会话变量,加载下一页并将搜索变量作为值填充到输入字段中,然后关闭自动完成功能,这样浏览器就无法覆盖您从会话值中提供的值。

对此的支持似乎相当广泛。并且在大多数情况下应该防止浏览器覆盖它为字段存储的任何内容。

如果你仍然遇到填充问题,你可能会考虑用reset((函数添加一些javascript功能。然而,根据它是如何激发的,它可能最终会覆盖DOM实际呈现时用PHP函数填充的任何内容

最新更新