通过html中的URL预填表单字段

Rao*_*Rao 10 html javascript

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

这是我在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>
Run Code Online (Sandbox Code Playgroud)

当用户点击类似网址时,我想用"some text"填充"message"字段 www.xyz.com/contact.html?setmessagefield=some_text

Cer*_*rus 17

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

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

现在,添加一些id你的字段:

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

<p>Your email:
<br /><input name="email" id="email" /></p>
Run Code Online (Sandbox Code Playgroud)

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

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]);;
}
Run Code Online (Sandbox Code Playgroud)

工作实例

这样做的最大优点是它具有灵活性.如果要设置2个字段的值,则id在哈希中提供这两个字段:

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

4个领域?4个id:

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

然后,无需编辑代码.


alo*_*ica 7

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

(new URL(window.location.href)).searchParams.forEach((x, y) =>
    document.getElementById(y).value = x)
Run Code Online (Sandbox Code Playgroud)

在线尝试!

  • 如果有人想对多个字段执行此操作(HTML 规则不允许相同的 ID),那么答案很好,请尝试 `document.getElementsByName(y).forEach((p) =&gt; (p.value = x)); ` (2认同)