表单提交后保持选定的值

IT技术 php javascript html wordpress forms
2021-01-20 12:49:28

考虑:

<form method="get" action="">
   <select name="name">
      <option value="a">a</option>
      <option value="b">b</option>
   </select>
   <select name="location">
      <option value="x">x</option>
      <option value="y">y</option>
   </select>
   <input type="submit" value="Submit" class="submit" />
</form>

提交表单时,如何确保所选值在下拉列表中保持选中状态?此表单位于 WordPress (PHP) 中。

6个回答

为了避免许多 if-else 结构,让 JavaScript 自动完成这个技巧:

<select name="name" id="name">
   <option value="a">a</option>
   <option value="b">b</option>
</select>

<script type="text/javascript">
  document.getElementById('name').value = "<?php echo $_GET['name'];?>";
</script>

<select name="location" id="location">
  <option value="x">x</option>
  <option value="y">y</option>
</select>

<script type="text/javascript">
  document.getElementById('location').value = "<?php echo $_GET['location'];?>";
</script>
值是正确的,但我得到“未捕获的类型错误:无法设置 null 的属性‘值’”选择名称匹配...idk
2021-03-15 12:49:28
奇怪的解决方案 IMO - 引入 javascript 来保存几行 PHP 是没有意义的。
2021-03-28 12:49:28
@Yarin:同意,一个快速的解决方案,到那时在办公室,没有太多时间:(
2021-04-02 12:49:28
很好的解决方案,但有点粗略。在 LEMP 堆栈上使用,我无法重新加载 nginx。使用 sudo tail /var/log/nginx/error.log 调试后,错误直接出现在这些行上,删除代码后,我能够重新加载就好了
2021-04-03 12:49:28
<select name="name">
   <option <?php if ($_GET['name'] == 'a') { ?>selected="true" <?php }; ?>value="a">a</option>
   <option <?php if ($_GET['name'] == 'b') { ?>selected="true" <?php }; ?>value="b">b</option>
</select>
如果option标签是在代码中生成的(如果不是,那为什么不呢?)你可以把检查放在循环中。
2021-04-11 12:49:28

在尝试了所有这些“解决方案”之后,没有任何效果。之前W3Schools做了一些研究,记得有关于保持无线电value观的解释。

但它也适用于该Select选项。请参阅下面的示例。试试吧,玩玩吧。

<?php
    $example = $_POST["example"];
?>
<form method="post">
    <select name="example">
        <option <?php if (isset($example) && $example=="a") echo "selected";?>>a</option>
        <option <?php if (isset($example) && $example=="b") echo "selected";?>>b</option>
        <option <?php if (isset($example) && $example=="c") echo "selected";?>>c</option>
    </select>
    <input type="submit" name="submit" value="submit" />
</form>

如果您使用的是 WordPress(就像 OP 一样),您可以使用该selected功能。

<form method="get" action="">
  <select name="name">
    <option value="a" <?php selected( isset($_POST['name']) ? $_POST['name'] : '', 'a' ); ?>>a</option>
    <option value="b" <?php selected( isset($_POST['name']) ? $_POST['name'] : '', 'b' ); ?>>b</option>
  </select>
  <select name="location">
    <option value="x" <?php selected( isset($_POST['location']) ? $_POST['location'] : '', 'x' ); ?>>x</option>
    <option value="y" <?php selected( isset($_POST['location']) ? $_POST['location'] : '', 'y' ); ?>>y</option>
  </select>
  <input type="submit" value="Submit" class="submit" />
</form>
我认为这是 WordPress 的最佳解决方案。这个对我有用。谢谢你。
2021-03-15 12:49:28

由于 WordPress 已经使用 jQuery,您可以尝试以下操作:

var POST=<?php echo json_encode($_POST); ?>;
for(k in POST){
  $("#"+k).val(POST[k]);
}
使用这种方法是否存在任何安全问题?
2021-03-26 12:49:28