代码之家  ›  专栏  ›  技术社区  ›  eozzy

在GET请求中保留值

  •  1
  • eozzy  · 技术社区  · 15 年前
    <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中消失,我该如何保留所有值?

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

    谢谢

    3 回复  |  直到 15 年前
        1
  •  5
  •   T.J. Crowder    15 年前

    提交表单会将目标页面加载到窗口中(在本例中,目标页面与您所在的页面相同)。我强烈推荐 当用户从列表中选择一个项目时提交表单;这不是用户期望发生的事情。

    但是如果你这样做了,你就必须跟踪用户在服务器端选择的字段,然后设置适当的 selected 属性 option 标记以前选择的值,例如生成表单时:

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

    但同样,最好让他们做出选择,然后用某种按钮提交表单。如果您希望根据列表中迄今为止所选择的项目来更改列表的内容,那么可以使用客户端JavaScript(可能与服务器的Ajax查询结合使用)来实现这一点。

        2
  •  0
  •   White Elephant    15 年前

    下面是对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
  •  0
  •   Ignacio Vazquez-Abrams    15 年前

    改变 form 标签到:

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