【问题标题】:Retaining values in a GET request在 GET 请求中保留值
【发布时间】:2010-02-11 16:37:56
【问题描述】:
<form method="get" action="">
   <select name="name" onchange='this.form.submit()'>
      <option value="a">a</option>
      <option value="b">b</option>
   </select>
   <select name="location" onchange='this.form.submit()'>
      <option value="x">x</option>
      <option value="y">y</option>
   </select>
</form>

我选择选项“a”,它工作正常,但如果我选择“x”,“a”值从 URL 中消失,我如何保留所有值?

编辑:同样在提交表单时,我如何确保所选值在选择菜单中也保持选中状态?

谢谢

【问题讨论】:

  • 当一个表单默认提交给它自己时,为什么你需要selfURL()
  • 啊,我不知道! :P 谢谢!

标签: php javascript html forms get


【解决方案1】:

提交表单会将目标页面加载到窗口中(在这种情况下,目标页面与您所在的页面相同)。我强烈建议不要在用户从列表中选择项目时提交表单;这不是用户所期望的。

但是,如果您这样做了,您将必须跟踪用户在“到目前为止”服务器端选择的字段,然后在 option 标记上为他们的值设置适当的 selected 属性'd 之前选择的,例如生成表单时:

<option value='a' selected>a</option>

但同样,最好让他们做出选择,然后使用某种按钮提交表单。如果您想让列表的内容根据他们目前选择的项目进行更改,您可以使用客户端 JavaScript(可能与对服务器的 Ajax 查询相结合)来实现。

【讨论】:

    【解决方案2】:

    这里是对 selfURL() 函数的快速更新,它应该会让你走上解决问题的道路。

    function selfURL() 
    { 
        $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : ""; 
        $protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s; 
        $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
        $uri  = $_SERVER['REQUEST_URI'];
        $querystring = empty($_SERVER['QUERY_STRING']) ? '' : '?'.$_SERVER['QUERY_STRING'];
        return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI'].$url.$querystring;
    }
    

    【讨论】:

      【解决方案3】:

      form标签改为:

      <form method="get" action="<?= _SERVER["REQUEST_URI"] ?>">
      

      【讨论】:

        猜你喜欢
        • 2017-06-06
        • 1970-01-01
        • 2015-07-02
        • 1970-01-01
        • 2013-04-17
        • 2015-10-20
        • 2015-08-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多