You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让PHP表单提交后跳转到页面指定锚点位置?

解决表单提交后定位到指定锚点的问题

嘿,这个需求很好实现,你只需要在表单的action属性里,把锚点#ContactUs直接追加到当前页面的URL后面就可以啦!

具体修改方法

原来的action指向当前页面,现在我们只需要在htmlspecialchars($_SERVER["PHP_SELF"])的末尾加上#ContactUs,修改后的完整表单代码如下:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>#ContactUs">
  <h2>SEND US A MESSAGE!</h2>
  <span>We'd be happy to hear from you.</span>
  <input name="contactname" placeholder="Name" type="text" value="<?php echo $contactname;?>"/>
  <span class="error"> <?php echo $contactnameErr;?></span>
  <input name="contactemail" placeholder="Email" type="text" value="<?php echo $contactemail;?>" />
  <span class="error"> <?php echo $contactemailErr;?></span>
  <input name="contactphone" placeholder="Phone #" type="text" value="<?php echo $contactphone;?>" />
  <span class="error"> <?php echo $contactphoneErr;?></span>
  <input name="contactsubject" placeholder="Subject" type="text" value="<?php echo $contactsubject;?>" />
  <span class="error"> <?php echo $contactsubjectErr;?></span>
  <textarea name="contactmessage" placeholder="Message"><?php echo $contactmessage;?></textarea>
  <span class="error"> <?php echo $contactmessageErr;?></span>
  <input type="submit" name="submit" value="Send" class="contact-button" />
</form>

原理说明

  • $_SERVER["PHP_SELF"]会输出当前页面的路径(比如/contact.php),加上#ContactUs后,完整的action路径就变成了/contact.php#ContactUs
  • 表单提交后,服务器处理完请求会返回这个带锚点的URL,浏览器加载页面时会自动滚动到ID为ContactUs的元素位置,而不是停在页面顶部
  • 你原本使用的htmlspecialchars()安全处理依然有效,锚点的添加不会影响XSS防护的效果

如果你的页面需要保留原有GET参数(不过你这里是POST提交,大概率不需要),也可以用$_SERVER["REQUEST_URI"]替代$_SERVER["PHP_SELF"],这样会保留原参数再追加锚点:

action="<?php echo htmlspecialchars($_SERVER["REQUEST_URI"]);?>#ContactUs"

你的场景用第一种方法就完全足够,提交后就能直接定位到表单所在的章节啦!

内容的提问来源于stack exchange,提问作者user7274404

火山引擎 最新活动