2

我有以下 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>

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

4

4 回答 4

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;
于 2010-03-30T13:42:15.200 回答
1

我不确定你是使用 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,就像其他人提到的那样,您将不得不解析查询字符串,但本质上也是如此:将其他参数添加到您的位置。

于 2010-04-03T00:27:31.653 回答
0

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

我会使用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 次空表单,他们会讨厌您的页面)。

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

于 2010-04-10T21:03:30.560 回答
0

您应该以新形式将要保留为隐藏输入的参数编写为 My PHP is rusty,但这里是:

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

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

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

于 2010-03-30T13:50:38.127 回答