如何使用表单输入中的值填充表单的操作参数?

Posted

技术标签:

【中文标题】如何使用表单输入中的值填充表单的操作参数?【英文标题】:How can I fill the action parameter of a form with values from the form's input? 【发布时间】:2013-05-26 16:19:54 【问题描述】:

我知道我可以从表单中传递查询参数并期望它们在查询字符串中:

<form method="GET">
  <input type="text" name="param" value="value" />
  <input type="submit" value="submit" />
</form>

这会导致

http://blah-blah-blah/blah?param=value

但是,在我的 web 应用程序中,我使用的是路径参数。要访问图书馆中的一本书 #459,您需要访问

/books/459

要签出一份,请发帖到

/books/459/checkout

其中 459 是路径参数。当我尝试时

<form action="/books/book_id">...</form>

需要我去

/books/%7Bbook_id%7D

而不是

/books/459

我需要 javascript 或其他东西来构建 URI 吗?

【问题讨论】:

【参考方案1】:

你可能需要这样的东西:

<form onsubmit="this.action = this.action + this.book_id.value;" ...>

但是,使动作依赖于脚本是糟糕的设计。您的服务器处理 URI ...?book_id=value 更加健壮,根本不需要任何客户端脚本。

【讨论】:

我同意使用脚本来控制操作是一个坏主意,但我不同意将所有内容都移动到查询参数,特别是如果方法是 POST。 我真的没有选择更改我正在编写的 API -- 规范和所有内容。 +1 但我实际上不明白为什么改变动作是糟糕的设计。除非有一些具体的反对意见/缺点,否则设计没有任何问题。请考虑说明为什么您认为这是糟糕的设计,或者从答案中删除断言:) @RudiKershaw — 原因就在答案中:“您的服务器处理 URI 更加健壮”。将逻辑放在服务器上意味着对它正确运行的信心更大,因为它消除了对客户端脚本的依赖。无论如何都会发送来自输入的值。【参考方案2】:

感谢 RobG

我在从移动应用程序调用 WhatsApp 时使用了同样的方法

效果很好

<form action="https://wa.me/" 
onsubmit="this.action = this.action + this.mobile.value; this.submit();">
  <input type="tel" name="mobile" size="10" value="91xxxxxxxxxx"/>
  <input type="text" name="text" value="Thanks Vijayan!" />
  <input type="submit" value="WhatsApp" />
</form>

【讨论】:

【参考方案3】:

如果您使用 php 生成 html,下面的代码应该可以工作(未经测试)。

$book_id = 459;
<form action="/books/$book_id">...</form>

或者,您可以使用 JavaScript 动态修改 html。最好不要这样做,因为有些用户可能会禁用 JavaScript。 (未经测试)

$('form').attr('action','/books/' + book_id);

【讨论】:

以上是关于如何使用表单输入中的值填充表单的操作参数?的主要内容,如果未能解决你的问题,请参考以下文章

在Spring boot中,如何将表单动作中的jsp表单输入的值作为参数传递

如何将 url 中的参数传递给背包创建表单

如何在 HTML 表单中“预填充”文本区域的值? [复制]

如何发送远程表单参数

如何根据每条记录的连续表单中 ms-access 中的其他值填充文本框上的值

按下表单中的输入时要执行的默认操作