Это работает для первого экземпляра, потому что getElementById
возвращает только один экземпляр элемента с идентификатором, который вы передаете ему - и если у вас есть несколько экземпляров на странице, он возвращает только первый экземпляр.
Как вы предложили, вы могли бы сделать идентификаторы уникальными, что, вероятно, я бы сделал как быстрое и простое решение.
Вместо этого вы могли бы использовать getElementsByName
, не слишком меняя сценарий или разметку, но затемвам также придется выполнить дополнительную проверку, когда одна из форм не имеет ввода, а также, если потенциально оба они имеют ввод (например, если кто-то ввел текст для ввода обеих форм).Похоже, что сделать идентификаторы уникальными было бы проще и быстрее.
Поскольку получение нескольких форм для выполнения одного и того же действия, вероятно, самое чистое, что вы можете сделать, - это создать метод, который прослушивает событие отправки формна вашей странице и использует event.target.elements['elementName']
, чтобы получить конкретные данные по имени.Примерно так:
<form>
<div class="input-group input-group-lg mb-3 p-2 bg-warning rounded">
<input type="text" class="form-control" placeholder="My company name" aria-label="My company name"
aria-describedby="basic-addon2" name="mycompany">
<div class="input-group-append">
<input class="btn btn-primary btn-lg" type="submit" name="mybutton">Get started!</button>
</div>
</div>
</form>
<form>
<div class="input-group input-group-lg mb-3 p-2 bg-warning rounded">
<input type="text" class="form-control" placeholder="My company name" aria-label="My company name"
aria-describedby="basic-addon2" name="mycompany">
<div class="input-group-append">
<input class="btn btn-primary btn-lg" type="submit" name="mybutton">Get started!</button>
</div>
</div>
</form>
<script>
document.addEventListener("submit", function(e) {
e.preventDefault();
const inputValue = e.target.elements['mycompany'].value;
window.open("https://airtable.com/myformidgoeshere?prefill_Company=" + encodeURIComponent(inputValue));
}, false);
</script>