17

当用户单击其他页面中给出的链接时,我正在寻找一种简单的方法来预先填写我的联系表单中的字段。

这是我在 html 中的联系表格:

<form method="post" action="submit.php" >
    <p>Your name:
    <br /><input name="name" /></p>
    <p>Your email:
    <br /><input name="email" /></p>
    <p>Your message:
    <br /><textarea name="message" id="message" rows="10" cols="50"></textarea></p>
    <p><input type="submit" value="Send" /></p>
</form>

当用户点击类似的网址时,我想用“一些文本”填充“消息”字段www.xyz.com/contact.html?setmessagefield=some_text

4

4 回答 4

20

JavaScript 没有内置函数来解析这样的 url 参数(因为这些 GET 参数通常用于向服务器发送数据)。
我建议改用哈希(哈希纯粹是客户端):

www.xyz.com/contact.html#name=some_text&email=more%20text

现在,id在您的字段中添加一些 's:

<p>Your name:
<br /><input name="name" id="name" /></p>

<p>Your email:
<br /><input name="email" id="email" /></p>

然后在加载时设置这样的值:

var hashParams = window.location.hash.substr(1).split('&'); // substr(1) to remove the `#`
for(var i = 0; i < hashParams.length; i++){
    var p = hashParams[i].split('=');
    document.getElementById(p[0]).value = decodeURIComponent(p[1]);;
}

工作示例

这样做的最大优点是它很灵活。如果要设置 2 个字段的值,请id在哈希中提供这 2 个字段:

www.xyz.com/contact.html#name=some_text&email=more%20text

4个领域?4个身份证:

www.xyz.com/contact.html#name=some_text&email=more%20text&username=john&age=23

那么就不需要编辑代码了。

于 2012-12-28T13:23:49.080 回答
20

更现代的方法是使用URL()构造函数searchParams 属性。让浏览器引擎完成工作!

(new URL(window.location.href)).searchParams.forEach((x, y) =>
    document.getElementById(y).value = x)

在线尝试!或堆栈溢出:

const hash = '?name=some_text&email=more%20text';
const example = "http://example.com/" + hash;

(new URL(example)).searchParams.forEach((x, y) =>
    document.getElementById(y).value = x);
<p>Your name:
<br /><input name="name" id="name" /></p>

<p>Your email:
<br /><input name="email" id="email" /></p>

于 2017-05-15T12:52:07.993 回答
3

如果您使用的是 PHP,请不要使用 JavaScript。

只需在 HTML 中添加一些内容:

<form method="post" action="submit.php" >
  <p>Your name:<br />
  <input name="name" value="<?php echo htmlspecialchars($_GET['name']) ?>" /></p>

  <p>Your email:<br />
  <input name="email" value="<?php echo htmlspecialchars($_GET['email']) ?>"/></p>

  <p>Your message:<br />
  <textarea name="message" id="message" rows="10" cols="50">
    <?php echo htmlspecialchars($_GET['message']) ?>
  </textarea></p>

  <p><input type="submit" value="Send" /></p>
</form>
于 2020-09-09T11:39:10.390 回答
1

您可以使用检索当前网址,window.location.href然后通过正则表达式获取默认消息:

var msg = window.location.href.match(/\?setmessagefield=(.*)/);
document.getElementById("message").value = msg[1];
于 2012-12-28T13:33:38.117 回答