【问题标题】:keep params and add another from a form保留参数并从表单中添加另一个
【发布时间】:2010-03-30 13:28:03
【问题描述】:

我有以下 3 个网址:

http://www.test.com?a=1
http://www.test.com?a=1&b=3
http://www.test.com?a=1&b=2&c=99

现在在一个表单中,我有一个像这样的下拉菜单:

<select name="b">
    <option value="1">1</option>
     ...
</select>

现在我想将该参数添加到现有参数列表中,或者编辑该参数(如果它已经存在),然后刷新页面。 有任何想法吗? 谢谢

【问题讨论】:

  • HTML 是如何生成的?即它是纯 HTML 文件,还是使用 PHP、JSP 等?

标签: php javascript get drop-down-menu params


【解决方案1】:

你可以用正则表达式的方式来做:

var myNewValue = 1; // the new value of input named b
var url = window.location.href;
if(url.match(/\Wb=/)) url = url.replace(/(\Wb=)[^&]*/, "$1"+myNewValue);
else url = url+"&b="+myNewValue;
window.location.href = url;

【讨论】:

  • 此代码需要if(!url.match('^.*[?]')) url = url+"?b="+myNewValue; 之类的情况,以在不存在其他参数的情况下添加参数。
【解决方案2】:

我不确定你是使用 PHP 还是 javascript 来解决这个问题,因为你用两者都标记了这个问题。

使用 PHP,当您提交表单时,您的其他参数将消失,除非您在表单中也包含旧参数,例如:

<select name="b">
    <option value="1">1</option>
    ...
</select>
<input type="hidden" name="a" value="<?php echo htmlentities(@$_GET['a']); ?>" />
<input type="hidden" name="c" value="<?php echo htmlentities(@$_GET['c']); ?>" />

但是,如果您使用的是 Javascript,就像其他人提到的那样,您将不得不解析查询字符串,但本质上也是这样做的:将其他参数添加到您的位置。

【讨论】:

    【解决方案3】:

    您应该在新表单中编写要保留为隐藏输入的参数 我的 PHP 生锈了,但这里是:

    <input type="hidden" name="a" value="<?php echo (int)$_GET['a']; ?>" />
    

    JavaScript 无法直接访问页面的请求参数,除非您使用正则表达式来解析参数列表。但是,服务器端技术(在您的情况下为 PHP)在生成页面时确实可以访问。

    通过在表单中​​创建隐藏输入,用户将无法更改值,但在再次提交表单时它们将被包含在内。

    【讨论】:

      【解决方案4】:

      "现在我想将该参数添加到现有参数列表中,或者编辑该参数(如果它已经存在)"

      我会使用 parse_str() / parse_url() 函数将 URL 拆分为关联数组,然后您可以使用新值添加/更新数组元素,并将其与 http_build_url() 组合回有效 URL。请查看 php 手册中的示例,编写代码比编写它更容易;)


      "然后刷新页面"

      关于隐藏表单元素的答案还不错,但我想知道用户是否会理解发生了什么(他不会看到他之前的选择被记住的可见确认,但你会以某种方式保存它)。因此,我会走一条不同的路:假设表单是用 php 生成的,而不是静态 HTML,为什么不确保在显示表单时突出显示在第一个表单提交中选择的选项后续提交?

      <select name="b">
          <option value="1" <?php if(isset($params['b']) && $params['b'] == 1) echo 'selected="selected"'; ?>>1</option>
      </select>
      

      它看起来有点乱,但是如果您养成重新显示用户输入的习惯,您可以节省他们的输入(如果他们因为某些验证而不得不填写 3 次空表单,他们会讨厌您的页面)。

      对于选项标签,正确的属性是“选中”,对于复选框/单选按钮,它是“选中”,文本输入具有属性“值”,您可以在其中输入任何您想要的内容等。不确定我是不是在谈论某事对你来说很明显......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多