Предварительно заполните поле формы через URL-адрес в html

Я ищу простой способ заполнить поле в моей контактной форме, когда пользователь нажимает ссылку, указанную на другой странице.

Это моя контактная форма в 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>

Я хочу заполнить поле "сообщение" "некоторым текстом", когда пользователь нажимает на URL-адрес, например www.xyz.com/contact.html?setmessagefield=some_text

Ответ 1

В 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>

Затем установите значения, подобные этому, при загрузке:

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 полей, вы поставьте эти 2 поля "id в хэш:

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

4 поля? 4 id's:

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

Нет необходимости редактировать код.

Ответ 2

Более современный способ - использовать конструктор 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>

Ответ 3

Вы можете получить текущий url с помощью window.location.href, а затем получить сообщение по умолчанию через регулярное выражение:

var msg = window.location.href.match(/\?setmessagefield=(.*)/);
document.getElementById("message").value = msg[1];